Ë
    òT•j?4 ã                   ó  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlZddlmZ 	 ddlZg d¢Zej$                  j'                  d«      Z G d„ d«      Z G d„ d	e«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ dej8                  j:                  «      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d „ d!e«      Z" G d"„ d#e«      Z# G d$„ d%«      Z$ G d&„ d'e$«      Z%d8d(„Z&d)„ Z'd*„ Z(d+„ Z)d,„ Z*d-„ Z+ G d.„ d/e,«      Z- G d0„ d1e-«      Z. G d2„ d3e-«      Z/ G d4„ d5e-«      Z0 G d6„ d7e-«      Z1y# e$ r dZY �ŒAw xY w)9zDRead/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.é    N)ÚGenericAlias)ÚMailboxÚMaildirÚmboxÚMHÚBabylÚMMDFÚMessageÚMaildirMessageÚmboxMessageÚ	MHMessageÚBabylMessageÚMMDFMessageÚErrorÚNoSuchMailboxErrorÚNotEmptyErrorÚExternalClashErrorÚFormatErrorÚasciic                   óè   — e Zd ZdZd#d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d$d	„Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd$d„Zd„ Zd$d„Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!Z"d%d"„Z# e$e%«      Z&y)&r   z*A group of messages in a particular place.Nc                 ó”   — t         j                  j                  t         j                  j                  |«      «      | _        || _        y)zInitialize a Mailbox instance.N)ÚosÚpathÚabspathÚ
expanduserÚ_pathÚ_factory©Úselfr   ÚfactoryÚcreates       ú/usr/lib/python3.12/mailbox.pyÚ__init__zMailbox.__init__%   s,   € ä—W‘W—_‘_¤R§W¡W×%7Ñ%7¸Ó%=Ó>ˆŒ
Øˆ�ó    c                 ó   — t        d«      ‚)ú$Add message and return assigned key.ú&Method must be implemented by subclass©ÚNotImplementedError©r   Úmessages     r"   ÚaddzMailbox.add*   ó   € ä!Ð"JÓKÐKr$   c                 ó   — t        d«      ‚)ú=Remove the keyed message; raise KeyError if it doesn't exist.r'   r(   ©r   Úkeys     r"   ÚremovezMailbox.remove.   r-   r$   c                 ó&   — | j                  |«       y ©N)r2   r0   s     r"   Ú__delitem__zMailbox.__delitem__2   s   € Ø�‰�CÕr$   c                 óF   — 	 | j                  |«       y# t        $ r Y yw xY w©z'If the keyed message exists, remove it.N)r2   ÚKeyErrorr0   s     r"   ÚdiscardzMailbox.discard5   s%   € ð	Ø�K‰K˜ÕøÜò 	Ùð	ús   ‚ ”	 Ÿ c                 ó   — t        d«      ‚)ú>Replace the keyed message; raise KeyError if it doesn't exist.r'   r(   ©r   r1   r+   s      r"   Ú__setitem__zMailbox.__setitem__<   r-   r$   c                 óH   — 	 | j                  |«      S # t        $ r |cY S w xY w)z9Return the keyed message, or default if it doesn't exist.)Ú__getitem__r8   )r   r1   Údefaults      r"   ÚgetzMailbox.get@   s,   € ð	Ø×#Ñ# CÓ(Ð(øÜò 	ØŠNð	ús   ‚ “! !c                 óÒ   — | j                   s| j                  |«      S t        j                  | j	                  |«      «      5 }| j                  |«      cddd«       S # 1 sw Y   yxY w)z=Return the keyed message; raise KeyError if it doesn't exist.N)r   Úget_messageÚ
contextlibÚclosingÚget_file)r   r1   Úfiles      r"   r?   zMailbox.__getitem__G   sT   € à�}Š}Ø×#Ñ# CÓ(Ð(ä×#Ñ# D§M¡M°#Ó$6Ó7ð +¸4Ø—}‘} TÓ*÷+÷ +ò +ús   ÁAÁA&c                 ó   — t        d«      ‚)ú4Return a Message representation or raise a KeyError.r'   r(   r0   s     r"   rC   zMailbox.get_messageO   r-   r$   c                 óf   — t        j                  | j                  |«      «      j                  «       S )zœReturn a string representation or raise a KeyError.

        Uses email.message.Message to create a 7bit clean string
        representation of the message.©ÚemailÚmessage_from_bytesÚ	get_bytesÚ	as_stringr0   s     r"   Ú
get_stringzMailbox.get_stringS   s'   € ô
 ×'Ñ'¨¯©°sÓ(;Ó<×FÑFÓHÐHr$   c                 ó   — t        d«      ‚)z8Return a byte string representation or raise a KeyError.r'   r(   r0   s     r"   rN   zMailbox.get_bytesZ   r-   r$   c                 ó   — t        d«      ‚)ú6Return a file-like representation or raise a KeyError.r'   r(   r0   s     r"   rF   zMailbox.get_file^   r-   r$   c                 ó   — t        d«      ‚)úReturn an iterator over keys.r'   r(   ©r   s    r"   ÚiterkeyszMailbox.iterkeysb   r-   r$   c                 ó4   — t        | j                  «       «      S )zReturn a list of keys.)ÚlistrW   rV   s    r"   ÚkeyszMailbox.keysf   s   € ä�D—M‘M“OÓ$Ð$r$   c              #   óh   K  — | j                  «       D ]  }	 | |   }|–— Œ y# t        $ r Y Œw xY w­w)z%Return an iterator over all messages.N©rW   r8   ©r   r1   Úvalues      r"   Ú
itervalueszMailbox.itervaluesj   sC   è ø€ à—=‘=“?ò 	ˆCðØ˜S™	�ð ‹Kñ	øô ò Ùðüs   ‚2—#œ2£	/¬2®/¯2c                 ó"   — | j                  «       S r4   )r_   rV   s    r"   Ú__iter__zMailbox.__iter__s   s   € Ø�‰Ó Ð r$   c                 ó4   — t        | j                  «       «      S )z,Return a list of messages. Memory intensive.)rY   r_   rV   s    r"   ÚvalueszMailbox.valuesv   s   € ä�D—O‘OÓ%Ó&Ð&r$   c              #   ól   K  — | j                  «       D ]  }	 | |   }||f–— Œ y# t        $ r Y Œw xY w­w)z.Return an iterator over (key, message) tuples.Nr\   r]   s      r"   Ú	iteritemszMailbox.iteritemsz   sH   è ø€ à—=‘=“?ò 	ˆCðØ˜S™	�ð ˜�,Óñ	øô ò Ùðüs   ‚4—%œ	4¥	1®4°1±4c                 ó4   — t        | j                  «       «      S )z9Return a list of (key, message) tuples. Memory intensive.)rY   re   rV   s    r"   ÚitemszMailbox.itemsƒ   s   € ä�D—N‘NÓ$Ó%Ð%r$   c                 ó   — t        d«      ‚)ú9Return True if the keyed message exists, False otherwise.r'   r(   r0   s     r"   Ú__contains__zMailbox.__contains__‡   r-   r$   c                 ó   — t        d«      ‚)ú*Return a count of messages in the mailbox.r'   r(   rV   s    r"   Ú__len__zMailbox.__len__‹   r-   r$   c                 óP   — | j                  «       D ]  }| j                  |«       Œ y)zDelete all messages.N)rZ   r9   r0   s     r"   ÚclearzMailbox.clear�   s#   € à—9‘9“;ò 	ˆCØ�L‰L˜Õñ	r$   c                 óV   — 	 | |   }| j                  |«       |S # t         $ r |cY S w xY w)z3Delete the keyed message and return it, or default.)r8   r9   )r   r1   r@   Úresults       r"   ÚpopzMailbox.pop”   s9   € ð	Ø˜#‘YˆFð 	�‰�SÔØˆøô ò 	ØŠNð	ús   ‚ š(§(c                 ój   — | j                  «       D ]  }|| j                  |«      fc S  t        d«      ‚)z6Delete an arbitrary (key, message) pair and return it.zNo messages in mailbox)rW   rr   r8   r0   s     r"   ÚpopitemzMailbox.popitem�   s8   € à—=‘=“?ò 	5ˆCØ˜Ÿ™ #›Ð'Ò'ð	5ô Ð3Ó4Ð4r$   c                 óÜ   — t        |d«      r|j                  «       }nt        |d«      r|j                  «       }n|}d}|D ]  \  }}	 || |<   Œ |rt        d«      ‚y# t        $ r d}Y Œ)w xY w)z4Change the messages that correspond to certain keys.re   rg   FTzNo message with key(s)N)Úhasattrre   rg   r8   )r   ÚargÚsourceÚbad_keyr1   r+   s         r"   ÚupdatezMailbox.update¤   sƒ   € ä�3˜Ô$Ø—]‘]“_‰FÜ�S˜'Ô"Ø—Y‘Y“[‰FàˆFØˆØ"ò 	‰LˆC�ðØ#��S’	ð	ñ
 ÜÐ3Ó4Ð4ð øô ò Ø’ðús   ÁAÁA+Á*A+c                 ó   — t        d«      ‚)ú&Write any pending changes to the disk.r'   r(   rV   s    r"   ÚflushzMailbox.flushµ   r-   r$   c                 ó   — t        d«      ‚)úLock the mailbox.r'   r(   rV   s    r"   ÚlockzMailbox.lock¹   r-   r$   c                 ó   — t        d«      ‚)ú#Unlock the mailbox if it is locked.r'   r(   rV   s    r"   ÚunlockzMailbox.unlock½   r-   r$   c                 ó   — t        d«      ‚)úFlush and close the mailbox.r'   r(   rV   s    r"   ÚclosezMailbox.closeÁ   r-   r$   c                 óV   — 	 |j                  d«      S # t        $ r t        d«      ‚w xY w)Nr   z?String input must be ASCII-only; use bytes or a Message instead)ÚencodeÚUnicodeErrorÚ
ValueErrorr*   s     r"   Ú_string_to_byteszMailbox._string_to_bytesÅ   s7   € ð	2Ø—>‘> 'Ó*Ð*øÜò 	2Üð 1ó 2ð 2ð	2ús   ‚ “(Fc                 ó  — t        |t        j                  j                  «      rÇt	        j
                  «       }t        j                  j                  ||d«      }|j                  |«       |j                  d«       |j                  «       }|j                  dt        «      }|j                  |«       | j                  r,|j                  t        «      s|j                  t        «       y
y
y
t        |t         t"        t        j$                  f«      rÚt        |t        j$                  «      r+t'        j(                  dt*        d«       |j-                  «       }t        |t         «      r| j/                  |«      }|r|j                  dd«      }|j                  dt        «      }|j                  |«       | j                  r,|j                  t        «      s|j                  t        «       y
y
y
t1        |d«      rýt1        |d«      r't'        j(                  d	t*        d«       |j2                  }d
}	 |j5                  «       }|j                  d«      r	|d
d dz   }n|j                  d«      r|d
d dz   }|snE|r|j7                  d«      rd|dd
 z   }|j                  dt        «      }|j                  |«       |}Œ‹| j                  r/|r,|j                  t        «      s|j                  t        «       y
y
y
y
t9        dt;        |«      z  «      ‚)z%Dump message contents to target file.r   ó   
ú8Use of StringIO input is deprecated, use BytesIO insteadé   s   
From s   
>From ÚreadÚbufferúDUse of text mode files is deprecated, use a binary mode file insteadNó   
éþÿÿÿó   éÿÿÿÿó   From s   >From é   úInvalid message type: %s)Ú
isinstancerL   r+   r
   ÚioÚBytesIOÚ	generatorÚBytesGeneratorÚflattenÚseekr�   ÚreplaceÚlinesepÚwriteÚ_append_newlineÚendswithÚstrÚbytesÚStringIOÚwarningsÚwarnÚDeprecationWarningÚgetvaluer‹   rv   r‘   ÚreadlineÚ
startswithÚ	TypeErrorÚtype)	r   r+   ÚtargetÚmangle_from_r‘   ÚgenÚdataÚlastlineÚlines	            r"   Ú_dump_messagezMailbox._dump_messageÒ   sv  € ô �gœuŸ}™}×4Ñ4Ô5Ü—Z‘Z“\ˆFÜ—/‘/×0Ñ0°¸ÀqÓIˆCØ�K‰K˜Ô Ø�K‰K˜ŒNØ—;‘;“=ˆDØ—<‘< ¤wÓ/ˆDØ�L‰L˜ÔØ×#Ò#¨D¯M©M¼'Ô,Bà—‘œWÕ%ð -CÐ#ô ˜¤#¤u¬b¯k©kÐ!:Ô;Ü˜'¤2§;¡;Ô/Ü—‘ð *Ü+=¸qôBà!×*Ñ*Ó,�Ü˜'¤3Ô'Ø×/Ñ/°Ó8�ÙØ!Ÿ/™/¨*°kÓB�Ø—o‘o e¬WÓ5ˆGØ�L‰L˜Ô!Ø×#Ò#¨G×,<Ñ,<¼WÔ,Eà—‘œWÕ%ð -FÐ#ô �W˜fÔ%Ü�w Ô)Ü—‘ð 5Ü6HÈ!ôMà!Ÿ.™.�ØˆHØØ×'Ñ'Ó)�à—=‘= Ô)Ø  ˜9 uÑ,‘DØ—]‘] 5Ô)Ø  ˜9 uÑ,�DÙØÙ D§O¡O°HÔ$=Ø$ t¨A¨B xÑ/�DØ—|‘| E¬7Ó3�Ø—‘˜TÔ"Ø�ð ð ×#Ò#©¸×9JÑ9JÌ7Ô9Sà—‘œWÕ%ð :T¨Ð#ô Ð6¼¸g»ÑFÓGÐGr$   ©NTr4   ©F)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r,   r2   r5   r9   r=   rA   r?   rC   rP   rN   rF   rW   rZ   r_   ra   rc   re   rg   rj   rm   ro   rr   rt   rz   r}   r€   rƒ   r†   r‹   r¤   r·   Úclassmethodr   Ú__class_getitem__© r$   r"   r   r   "   sÄ   „ Ù4ó ò
LòLòòòLóò+òLòIòLòLòLò%òò!ò'òò&òLòLòó
ò5ó5ò"LòLòLòLò2ð €Oó4Hñl $ LÓ1Ñr$   r   c                   óª   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdZd„ Zd„ Zd„ Zd„ Zy)r   zA qmail-style Maildir mailbox.ú:Nc                 ó¤  — t         j                  | |||«       t        j                  j	                  | j
                  d«      t        j                  j	                  | j
                  d«      t        j                  j	                  | j
                  d«      dœ| _        t        j                  j                  | j
                  «      sm|rVt        j                  | j
                  d«       | j                  j                  «       D ]  }t        j                  |d«       Œ nt        | j
                  «      ‚i | _        dddœ| _        d| _        d| _        y	)
zInitialize a Maildir instance.ÚtmpÚnewÚcur)rÄ   rÅ   rÆ   éÀ  r   )rÆ   rÅ   gš™™™™™¹?N)r   r#   r   r   Újoinr   Ú_pathsÚexistsÚmkdirrc   r   Ú_tocÚ_toc_mtimesÚ
_last_readÚ_skewfactor)r   Údirnamer    r!   r   s        r"   r#   zMaildir.__init__  sê   € ä×Ñ˜˜w¨°Ô8ä—7‘7—<‘< §
¡
¨EÓ2Ü—7‘7—<‘< §
¡
¨EÓ2Ü—7‘7—<‘< §
¡
¨EÓ2ñˆŒô
 �w‰w�~‰~˜dŸj™jÔ)ÙÜ—‘˜Ÿ™ UÔ+Ø ŸK™K×.Ñ.Ó0ò *�DÜ—H‘H˜T 5Õ)ñ*ô )¨¯©Ó4Ð4ØˆŒ	Ø#$¨QÑ/ˆÔØˆŒØˆÕr$   c                 óÜ  — | j                  «       }	 | j                  ||«       t        |«       t        |t        «      r?|j                  «       }| j                  |j                  «       z   }|| j                  k(  rd}nd}d}t        j                  j                  |j                  «      j                  | j                  «      d   }t        j                  j!                  | j"                  |||z   «      }t        |t        «      rWt	        j$                  |j                  t        j                  j'                  |j                  «      |j)                  «       f«       	 	 t	        j*                  |j                  |«       t	        j
                  |j                  «       |S # t        $ r1 |j                  «        t	        j
                  |j                  «       ‚ w xY w# t,        t.        f$ r$ t	        j0                  |j                  |«       Y |S w xY w# t2        $ rP}t	        j
                  |j                  «       |j4                  t4        j6                  k(  rt9        d|z  «      ‚‚ d}~ww xY w)r&   Ú rÅ   r   z$Name clash with existing message: %sN)Ú_create_tmpr·   ÚBaseExceptionr†   r   r2   ÚnameÚ_sync_closerš   r   Ú
get_subdirÚcolonÚget_infor   ÚbasenameÚsplitrÈ   r   ÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoÚEEXISTr   )r   r+   Útmp_fileÚsubdirÚsuffixÚuniqÚdestÚes           r"   r,   zMaildir.add$  sä  € à×#Ñ#Ó%ˆð	Ø×Ñ˜w¨Ô1ô
 	�HÔÜ�gœ~Ô.Ø×'Ñ'Ó)ˆFØ—Z‘Z '×"2Ñ"2Ó"4Ñ4ˆFØ˜Ÿ™Ò#Ø‘àˆFØˆFÜ�w‰w×Ñ §¡Ó.×4Ñ4°T·Z±ZÓ@ÀÑCˆÜ�w‰w�|‰|˜DŸJ™J¨°°v±Ó>ˆÜ�gœ~Ô.Ü�H‰H�X—]‘]Ü—g‘g×&Ñ& x§}¡}Ó5°w×7GÑ7GÓ7IÐJôLð
	ð)Ü—‘˜Ÿ™ tÔ,ô —	‘	˜(Ÿ-™-Ô(ð ˆøôG ò 	Ø�N‰NÔÜ�I‰I�h—m‘mÔ$Øð	ûô0 #¤OÐ4ò /Ü—	‘	˜(Ÿ-™-¨Õ.ð ˆð/ûô ò 	Ü�I‰I�h—m‘mÔ$Ø�w‰wœ%Ÿ,™,Ò&Ü(Ð)OØ+/ñ*0ó 1ð 1ð ûð	úsB   ’F Å G Å>H Æ:GÇ/HÈH ÈHÈH È	I+ÈAI&É&I+c                 óœ   — t        j                  t         j                  j                  | j                  | j                  |«      «      «       y©r/   N)r   r2   r   rÈ   r   Ú_lookupr0   s     r"   r2   zMaildir.removeN  s*   € ä
�	‰	”"—'‘'—,‘,˜tŸz™z¨4¯<©<¸Ó+<Ó=Õ>r$   c                 óR   — 	 | j                  |«       y# t        t        f$ r Y yw xY wr7   )r2   r8   ÚFileNotFoundErrorr0   s     r"   r9   zMaildir.discardR  s+   € ð	Ø�K‰K˜ÕøÜÔ+Ð,ò 	Ùð	ús   ‚ ”&¥&c                 óî  — | j                  |«      }| j                  |«      }| j                  |«      }t        |t        «      r|}n|}t        j
                  j                  |«      }| j                  |v r,| j                  |j                  | j                  «      d   z   }nd}| j                  |«       t        j
                  j                  | j                  |«      }	t        j
                  j                  | j                  |||z   «      }
t        |t        «      rCt	        j                  |	t        j
                  j                  |	«      |j                  «       f«       t	        j                  |	|
«       y)r;   r–   rÒ   N)rî   r,   rš   r   r   r   rÐ   rØ   rÛ   r9   rÈ   r   rÜ   rÝ   rÞ   râ   )r   r1   r+   Úold_subpathÚtemp_keyÚtemp_subpathÚdominant_subpathrç   rè   Útmp_pathÚnew_paths              r"   r=   zMaildir.__setitem__Z  s  € à—l‘l 3Ó'ˆØ—8‘8˜GÓ$ˆØ—|‘| HÓ-ˆÜ�gœ~Ô.à+Ñð  +ÐÜ—‘—‘Ð!1Ó2ˆØ�:‰:Ð)Ñ)Ø—Z‘ZÐ"2×"8Ñ"8¸¿¹Ó"DÀRÑ"HÑH‰FàˆFØ�‰�SÔÜ—7‘7—<‘< §
¡
¨LÓ9ˆÜ—7‘7—<‘< §
¡
¨F°C¸&±LÓAˆÜ�gœ~Ô.Ü�H‰H�XÜ—g‘g×&Ñ& xÓ0°'×2BÑ2BÓ2DÐEôGô
 	�	‰	�(˜HÕ%r$   c                 ó”  — | j                  |«      }t        t        j                  j	                  | j
                  |«      d«      5 }| j                  r| j                  |«      }nt        |«      }ddd«       t        j                  j                  |«      \  }}j                  |«       | j                  |v r-|j                  |j                  | j                  «      d   «       |j                  t        j                  j                  t        j                  j	                  | j
                  |«      «      «       |S # 1 sw Y   ŒÏxY w)rI   ÚrbNr–   )rî   Úopenr   r   rÈ   r   r   r   rÛ   Ú
set_subdirrØ   Úset_infoÚset_dateÚgetmtime)r   r1   ÚsubpathÚfÚmsgrç   rÕ   s          r"   rC   zMaildir.get_messageu  sä   € à—,‘,˜sÓ#ˆÜ”"—'‘'—,‘,˜tŸz™z¨7Ó3°TÓ:ð 	(¸aØ�}Š}Ø—m‘m AÓ&‘ä$ QÓ'�÷		(ô
 —w‘w—}‘} WÓ-‰ˆ�Ø�‰�vÔØ�:‰:˜ÑØ�L‰L˜Ÿ™ D§J¡JÓ/°Ñ3Ô4Ø�‰”R—W‘W×%Ñ%¤b§g¡g§l¡l°4·:±:¸wÓ&GÓHÔIØˆ
÷	(ð 	(ús   Á*D>Ä>Ec                 óü   — t        t        j                  j                  | j                  | j                  |«      «      d«      5 }|j                  «       j                  t        d«      cddd«       S # 1 sw Y   yxY w)ú2Return a bytes representation or raise a KeyError.rù   r�   N)	rú   r   r   rÈ   r   rî   r�   r¡   r¢   ©r   r1   r   s      r"   rN   zMaildir.get_bytes„  sU   € ä”"—'‘'—,‘,˜tŸz™z¨4¯<©<¸Ó+<Ó=¸tÓDð 	4ÈØ—6‘6“8×#Ñ#¤G¨UÓ3÷	4÷ 	4ò 	4ús   Á$A2Á2A;c                 óž   — t        t        j                  j                  | j                  | j                  |«      «      d«      }t        |«      S )rS   rù   )rú   r   r   rÈ   r   rî   Ú
_ProxyFiler  s      r"   rF   zMaildir.get_file‰  s4   € ä”—‘—‘˜dŸj™j¨$¯,©,°sÓ*;Ó<¸dÓCˆÜ˜!‹}Ðr$   c              #   ó˜   K  — | j                  «        | j                  D ]  }	 | j                  |«       |–— Œ y# t        $ r Y Œ'w xY w­w©rU   N)Ú_refreshrÌ   rî   r8   r0   s     r"   rW   zMaildir.iterkeysŽ  sM   è ø€ à�‰ŒØ—9‘9ò 	ˆCðØ—‘˜SÔ!ð ‹Iñ	øô ò Ùðüs%   ‚ A
£;´A
»	AÁA
ÁAÁA
c                 ó>   — | j                  «        || j                  v S ©ri   )r	  rÌ   r0   s     r"   rj   zMaildir.__contains__˜  s   € à�‰ŒØ�d—i‘iÐÐr$   c                 óL   — | j                  «        t        | j                  «      S ©rl   )r	  ÚlenrÌ   rV   s    r"   rm   zMaildir.__len__�  s   € à�‰ŒÜ�4—9‘9‹~Ðr$   c                  ó   — y)ú"Write any pending changes to disk.NrÀ   rV   s    r"   r}   zMaildir.flush¢  s   € ð 	r$   c                  ó   — y)r   NrÀ   rV   s    r"   r€   zMaildir.lock¨  ó   € àr$   c                  ó   — y)r‚   NrÀ   rV   s    r"   rƒ   zMaildir.unlock¬  r  r$   c                  ó   — y©r…   NrÀ   rV   s    r"   r†   zMaildir.close°  r  r$   c                 ó:  — g }t        j                  | j                  «      D ]v  }t        |«      dkD  sŒ|d   dk(  sŒt         j                  j                  t         j                  j                  | j                  |«      «      sŒc|j                  |dd «       Œx |S )úReturn a list of folder names.é   r   ú.N)r   Úlistdirr   r  r   ÚisdirrÈ   Úappend©r   rq   Úentrys      r"   Úlist_folderszMaildir.list_folders´  st   € àˆÜ—Z‘Z §
¡
Ó+ò 	)ˆEÜ�5‹z˜A‹~ %¨¡(¨c£/Ü�w‰w�}‰}œRŸW™WŸ\™\¨$¯*©*°eÓ<Õ=Ø—‘˜e A B˜iÕ(ð	)ð ˆr$   c                 óˆ   — t        t        j                  j                  | j                  d|z   «      | j
                  d¬«      S )z/Return a Maildir instance for the named folder.r  F©r    r!   )r   r   r   rÈ   r   r   ©r   Úfolders     r"   Ú
get_folderzMaildir.get_folder½  s2   € ä”r—w‘w—|‘| D§J¡J°°f±Ó=Ø#Ÿ}™}Ø#ô%ð 	%r$   c                 óž  — t         j                  j                  | j                  d|z   «      }t	        || j
                  ¬«      }t         j                  j                  |d«      }t         j                  j                  |«      sIt        j                  t        j                  |t         j                  t         j                  z  d«      «       |S )z>Create a folder and return a Maildir instance representing it.r  ©r    Úmaildirfolderé¶  )r   r   rÈ   r   r   r   rÊ   r†   rú   ÚO_CREATÚO_WRONLY)r   r#  r   rq   Úmaildirfolder_paths        r"   Ú
add_folderzMaildir.add_folderÃ  s…   € ä�w‰w�|‰|˜DŸJ™J¨¨f©Ó5ˆÜ˜ t§}¡}Ô5ˆÜŸW™WŸ\™\¨$°Ó@ÐÜ�w‰w�~‰~Ð0Ô1Ü�H‰H”R—W‘WÐ/´·±¼b¿k¹kÑ1IØóô àˆr$   c                 óÄ  — t         j                  j                  | j                  d|z   «      }t        j                  t         j                  j                  |d«      «      t        j                  t         j                  j                  |d«      «      z   D ]&  }t        |«      dk  s	|d   dk7  sŒt        d|z  «      ‚ t        j                  |«      D ]b  }|dk7  sŒ	|dk7  sŒ|dk7  sŒt         j                  j                  t         j                  j                  ||«      «      sŒSt        d|›d	|›�«      ‚ t        j                  |d
¬«      D ]z  \  }}}|D ]5  }t        j                  t         j                  j                  ||«      «       Œ7 |D ]5  }t        j                  t         j                  j                  ||«      «       Œ7 Œ| t        j                  |«       y)ú-Delete the named folder, which must be empty.r  rÅ   rÆ   r  r   zFolder contains message(s): %srÄ   zFolder contains subdirectory 'z': F)ÚtopdownN)r   r   rÈ   r   r  r  r   r  Úwalkr2   Úrmdir)r   r#  r   r  ÚrootÚdirsÚfiless          r"   Úremove_folderzMaildir.remove_folderÍ  st  € ä�w‰w�|‰|˜DŸJ™J¨¨f©Ó5ˆÜ—Z‘Z¤§¡§¡¨T°5Ó 9Ó:Ü—Z‘Z¤§¡§¡¨T°5Ó 9Ó:ñ;ò 	OˆEä�5‹z˜AŠ~  q¡¨S£Ü#Ð$DÀvÑ$MÓNÐNð	Oô —Z‘Z Ó%ò 	5ˆEØ˜‹~ %¨5£.°U¸e³^Ü�w‰w�}‰}œRŸW™WŸ\™\¨$°Ó6Õ7Ý#Ú%+©Uð%4ó 5ð 5ð	5ô
 "$§¡¨°uÔ!=ò 	4ÑˆD�$˜Øò 5�Ü—	‘	œ"Ÿ'™'Ÿ,™, t¨UÓ3Õ4ð5àò 4�Ü—‘œŸ™Ÿ™ d¨EÓ2Õ3ñ4ð	4ô
 	�‰��r$   c                 ó|  — t        j                   «       }t        j                  t        j                  j	                  | j
                  d«      «      D ]h  }t        j                  j	                  | j
                  d|«      }|t        j                  j                  |«      z
  dkD  sŒTt        j                  |«       Œj y)zDelete old files in "tmp".rÄ   i@ú N)Útimer   r  r   rÈ   r   rÝ   r2   )r   Únowr  r   s       r"   ÚcleanzMaildir.cleanà  sy   € ä�i‰i‹kˆÜ—Z‘Z¤§¡§¡¨T¯Z©Z¸Ó ?Ó@ò 	 ˆEÜ—7‘7—<‘< §
¡
¨E°5Ó9ˆDØ”R—W‘W×%Ñ% dÓ+Ñ+¨fÓ4Ü—	‘	˜$•ñ	 r$   r  c           	      ób  — t        j                   «       }t        j                  «       }d|v r|j                  dd«      }d|v r|j                  dd«      }t	        |«      ›dt	        |dz  dz  «      ›dt        j                  «       ›d	t        j                  ›d
|›�	}t
        j                  j                  | j                  d|«      }	 t        j                  |«       t!        d|z  «      ‚# t        $ r9 t        xj                  dz  c_        	 t        |«      cY S # t        $ r Y nw xY wY ŒOw xY w)z=Create a file in the tmp subdirectory and open and return it.ú/z\057rÂ   z\072z.Mr  g    €„.AÚPÚQr  rÄ   z&Name clash prevented file creation: %s)r7  ÚsocketÚgethostnamer¡   Úintr   Úgetpidr   Ú_countr   rÈ   r   Ústatrð   Ú_create_carefullyÚFileExistsErrorr   )r   r8  Úhostnameré   r   s        r"   rÓ   zMaildir._create_tmpê  s  € ä�i‰i‹kˆÜ×%Ñ%Ó'ˆØ�(‰?Ø×'Ñ'¨¨WÓ5ˆHØ�(‰?Ø×'Ñ'¨¨WÓ5ˆHÜ$'¨¥H¬c°#¸±'¸C±-Õ.@Ä"Ç)Á)Å+Ü$+§N£N±Hð>ˆä�w‰w�|‰|˜DŸJ™J¨¨tÓ4ˆð	Ü�G‰G�DŒMô !Ð!IØ!%ñ"&ó 'ð 	'øô !ò 	Ü�NŠN˜aÑ�NðÜ(¨Ó.Ò.øÜ"ò ÙðúÙð	ús6   Ã	C, Ã,"D.Ä
DÄD.Ä	D(Ä%D.Ä'D(Ä(D.Ä-D.c                 óú  — t        j                   «       | j                  z
  d| j                  z   kD  red}| j                  D ]Q  }t        j
                  j                  | j                  |   «      }|| j                  |   kD  rd}|| j                  |<   ŒS |syi | _        | j                  D ]¶  }| j                  |   }t	        j                  |«      D ]�  }t        j
                  j                  ||«      }t        j
                  j                  |«      rŒC|j                  | j                  «      d   }t        j
                  j                  ||«      | j                  |<   Œ� Œ¸ t        j                   «       | _        y)z!Update table of contents mapping.é   FTNr   )r7  rÎ   rÏ   rÍ   r   r   rþ   rÉ   rÌ   r  rÈ   r  rÛ   rØ   )r   Úrefreshrç   Úmtimer   r  Úpré   s           r"   r	  zMaildir._refresh  s8  € ô �9‰9‹;˜Ÿ™Ñ(¨1¨t×/?Ñ/?Ñ+?Ò?ØˆGØ×*Ñ*ò 1�ÜŸ™×(Ñ(¨¯©°VÑ)<Ó=�Ø˜4×+Ñ+¨FÑ3Ò3Ø"�GØ+0�× Ñ  Ò(ð	1ñ
 ØàˆŒ	Ø×&Ñ&ò 	>ˆFØ—;‘;˜vÑ&ˆDÜŸ™ DÓ)ò >�Ü—G‘G—L‘L  uÓ-�Ü—7‘7—=‘= Ô#ØØ—{‘{ 4§:¡:Ó.¨qÑ1�Ü"$§'¡'§,¡,¨v°uÓ"=�—	‘	˜$’ñ>ð	>ô Ÿ)™)›+ˆ�r$   c                 ób  — 	 t         j                  j                  t         j                  j                  | j                  | j
                  |   «      «      r| j
                  |   S 	 | j                  «        	 | j
                  |   S # t        $ r Y Œ+w xY w# t        $ r t        d|z  «      d‚w xY w)z=Use TOC to return subpath for given key, or raise a KeyError.úNo message with key: %sN)r   r   rÊ   rÈ   r   rÌ   r8   r	  r0   s     r"   rî   zMaildir._lookup&  sž   € ð	Ü�w‰w�~‰~œbŸg™gŸl™l¨4¯:©:°t·y±yÀ±~ÓFÔGØ—y‘y ‘~Ð%ð Hð 	�‰Œð	FØ—9‘9˜S‘>Ð!øô	 ò 	Ùð	ûô
 ò 	FÜÐ4°sÑ:Ó;ÀÐEð	Fús   ‚A"B Á7B Â	BÂBÂB.c                 óª   — t        | d«      s| j                  «       | _        	 	 | t        | j                  «         S # t        $ r Y yt
        $ r Y Œ/w xY w)z0Return the next message in a one-time iteration.Ú_onetime_keysN)rv   rW   rO  ÚnextÚStopIterationr8   rV   s    r"   rP  zMaildir.next4  sU   € ä�t˜_Ô-Ø!%§¡£ˆDÔØðØœD ×!3Ñ!3Ó4Ñ5Ð5øÜ ò ÙÜò Ùðús   ¤< ¼	AÁAÁAr¸   )rº   r»   r¼   r½   rØ   r#   r,   r2   r9   r=   rC   rN   rF   rW   rj   rm   r}   r€   rƒ   r†   r  r$  r,  r5  r9  rB  rÓ   r	  rî   rP  rÀ   r$   r"   r   r     sŒ   „ Ù(à€Eóò((òT?òò&ò6ò4ò
ò
ò ò
ò
òòòòò%òòò& ð €Fò'ò0"&òHFó
r$   r   c                   ót   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zy)Ú_singlefileMailboxzA single-file mailbox.Nc                 ó  — t         j                  | |||«       	 t        | j                  d«      }|| _
        d| _        d| _        d| _        d| _        d| _        d| _        y# t        $ r™}|j
                  t
        j                  k(  r.|rt        | j                  d«      }nYt        | j                  «      ‚|j
                  t
        j                  t
        j                  fv rt        | j                  d«      }n‚ Y d}~ŒÏd}~ww xY w)z!Initialize a single-file mailbox.úrb+zwb+rù   Nr   F)r   r#   rú   r   rã   rä   ÚENOENTr   ÚEACCESÚEROFSÚ_filerÌ   Ú	_next_keyÚ_pendingÚ_pending_syncÚ_lockedÚ_file_length)r   r   r    r!   r   rë   s         r"   r#   z_singlefileMailbox.__init__D  sÑ   € ä×Ñ˜˜t W¨fÔ5ð	Ü�T—Z‘Z Ó'ˆAð ˆŒ
ØˆŒ	ØˆŒØˆŒØ"ˆÔØˆŒØ ˆÕøô! ò 		Ø�w‰wœ%Ÿ,™,Ò&ÙÜ˜TŸZ™Z¨Ó/‘Aä,¨T¯Z©ZÓ8Ð8Ø—‘œUŸ\™\¬5¯;©;Ð7Ñ7Ü˜Ÿ™ TÓ*‘àÿøð		ús   šA" Á"	DÁ+BC?Ã?Dc                 óÈ   — | j                  «        | j                  |«      | j                  | j                  <   | xj                  dz  c_        d| _        | j                  dz
  S )r&   r  T)rî   Ú_append_messagerÌ   rZ  r\  r*   s     r"   r,   z_singlefileMailbox.add[  sO   € à�‰ŒØ$(×$8Ñ$8¸Ó$Aˆ�	‰	�$—.‘.Ñ!Ø�Š˜!Ñ�ð "ˆÔØ�~‰~ Ñ!Ð!r$   c                 óN   — | j                  |«       | j                  |= d| _        y)r/   TN)rî   rÌ   r[  r0   s     r"   r2   z_singlefileMailbox.removee  s    € à�‰�SÔØ�I‰I�cˆNØˆ�r$   c                 óp   — | j                  |«       | j                  |«      | j                  |<   d| _        y)r;   TN)rî   r`  rÌ   r[  r<   s      r"   r=   z_singlefileMailbox.__setitem__k  s-   € à�‰�SÔØ×-Ñ-¨gÓ6ˆ�	‰	�#‰Øˆ�r$   c              #   ót   K  — | j                  «        | j                  j                  «       E d{  –—†  y7 Œ­wr  )rî   rÌ   rZ   rV   s    r"   rW   z_singlefileMailbox.iterkeysq  s#   è ø€ à�‰ŒØ—9‘9—>‘>Ó#×#Ò#ús   ‚.8°6±8c                 ó>   — | j                  «        || j                  v S r  )rî   rÌ   r0   s     r"   rj   z_singlefileMailbox.__contains__v  s   € à�‰ŒØ�d—i‘iÐÐr$   c                 óL   — | j                  «        t        | j                  «      S r  )rî   r  rÌ   rV   s    r"   rm   z_singlefileMailbox.__len__{  s   € à�‰ŒÜ�4—9‘9‹~Ðr$   c                 óV   — | j                   st        | j                  «       d| _         yy)r   TN)r]  Ú
_lock_filerY  rV   s    r"   r€   z_singlefileMailbox.lock€  s!   € à�|Š|Ü�t—z‘zÔ"ØˆD�Lð r$   c                 óV   — | j                   rt        | j                  «       d| _         yy©r‚   FN)r]  Ú_unlock_filerY  rV   s    r"   rƒ   z_singlefileMailbox.unlock†  s!   € à�<Š<Ü˜Ÿ™Ô$Ø ˆD�Lð r$   c           	      ó2  — | j                   s)| j                  rt        | j                  «       d| _        y| j                  €J ‚| j                  j                  dd«       | j                  j                  «       }|| j                  k7  rt        d| j                  |fz  «      ‚t        | j                  «      }	 i }| j                  |«       t        | j                  j                  «       «      D ]Ì  }| j                  |   \  }}| j                  j                  |«       | j                  |«       |j                  «       }	 | j                  j                  t!        d|| j                  j                  «       z
  «      «      }|sn|j#                  |«       ŒU||j                  «       f||<   | j%                  |«       ŒÎ |j                  «       | _        t/        |«       | j                  j'                  «        t)        j0                  | j                  «      }	t)        j2                  |j,                  |	j4                  «       	 t)        j6                  |j,                  |	j8                  |	j:                  «       	 t)        j@                  |j,                  | j                  «       tE        | j                  d«      | _        || _        d| _         d| _        | jF                  rtI        | j                  d¬«       yy#  |j'                  «        t)        j*                  |j,                  «       ‚ xY w# t<        t>        f$ r Y ŒÆw xY w# tB        $ rL t)        j*                  | j                  «       t)        j@                  |j,                  | j                  «       Y Œów xY w)	r  FNr   rH  z4Size of mailbox file changed (expected %i, found %i)é   rU  )Údotlock)%r[  r\  Ú_sync_flushrY  rÌ   r    Útellr^  r   Ú_create_temporaryr   Ú_pre_mailbox_hookÚsortedrZ   Ú_pre_message_hookr�   Úminr£   Ú_post_message_hookr†   r   r2   rÕ   rÖ   rC  ÚchmodÚst_modeÚchownÚst_uidÚst_gidrà   rã   râ   rE  rú   r]  rg  )
r   Úcur_lenÚnew_fileÚnew_tocr1   ÚstartÚstopÚ	new_startr‘   Úinfos
             r"   r}   z_singlefileMailbox.flushŒ  sÊ  € à�}Š}Ø×!Ò!ô ˜DŸJ™JÔ'Ø%*�Ô"Øð
 �y‰yÐ$Ð$Ð$ð 	�
‰
�‰˜˜1ÔØ—*‘*—/‘/Ó#ˆØ�d×'Ñ'Ò'Ü$ð &?à&*×&7Ñ&7¸Ð%Añ&Bó Cð Cô % T§Z¡ZÓ0ˆð	ØˆGØ×"Ñ" 8Ô,Ü˜dŸi™iŸn™nÓ.Ó/ò 2�Ø"Ÿi™i¨™n‘��tØ—
‘
—‘ Ô&Ø×&Ñ& xÔ0Ø$ŸM™M›O�	ØØ!ŸZ™ZŸ_™_¬S°Ø15¸¿
¹
¿¹Ó8IÑ1Ió.Kó L�Fá!ØØ—N‘N 6Ô*ð ð !*¨8¯=©=«?Ð;�˜‘Ø×'Ñ'¨Õ1ð2ð !)§¡£ˆDÔô
 	�HÔà�
‰
×ÑÔä�w‰w�t—z‘zÓ"ˆÜ
�‰�—‘ §¡Ô-ð	Ü�H‰H�X—]‘] D§K¡K°·±Ô=ð	1Ü�I‰I�h—m‘m T§Z¡ZÔ0ô ˜$Ÿ*™* eÓ,ˆŒ
ØˆŒ	ØˆŒØ"ˆÔØ�<Š<Ü�t—z‘z¨5Ö1ð øð/	Ø�N‰NÔÜ�I‰I�h—m‘mÔ$Øûô ¤Ð(ò 	Ùð	ûô ò 	1Ü�I‰I�d—j‘jÔ!Ü�I‰I�h—m‘m T§Z¡ZÖ0ð	1ús2   Â9DK7 É5L, É8*M Ë72L)Ì,L>Ì=L>ÍANÎNc                  ó   — y)ú,Called before writing the mailbox to file f.NrÀ   ©r   r   s     r"   rq  z$_singlefileMailbox._pre_mailbox_hookÐ  r  r$   c                  ó   — y)ú-Called before writing each message to file f.NrÀ   r„  s     r"   rs  z$_singlefileMailbox._pre_message_hookÔ  r  r$   c                  ó   — y©ú,Called after writing each message to file f.NrÀ   r„  s     r"   ru  z%_singlefileMailbox._post_message_hookØ  r  r$   c                 óˆ  — 	 | j                  «        	 | j                  r| j                  «        | j                  j	                  «        y# | j                  j	                  «        w xY w# 	 | j                  r| j                  «        | j                  j	                  «        w # | j                  j	                  «        w xY wxY wr  )r}   r]  rƒ   rY  r†   rV   s    r"   r†   z_singlefileMailbox.closeÜ  s|   € ð	#Ø�J‰JŒLð#Ø—<’<Ø—K‘K”Mà—
‘
× Ñ Õ"ø�—
‘
× Ñ Õ"ûð	#Ø—<’<Ø—K‘K”Mà—
‘
× Ñ Õ"ø�—
‘
× Ñ Õ"ýs.   ‚A) “A
 Á
A&Á)CÁ+B"ÂCÂ"B>Â>Cc                 ó˜   — | j                   €| j                  «        |�	 | j                   |   S y# t        $ r t        d|z  «      d‚w xY w)z'Return (start, stop) or raise KeyError.NrM  )rÌ   Ú_generate_tocr8   r0   s     r"   rî   z_singlefileMailbox._lookupç  s\   € à�9‰9ÐØ×ÑÔ Øˆ?ðJØ—y‘y ‘~Ð%ð øô ò JÜÐ8¸3Ñ>Ó?ÀTÐIðJús	    0 °A	c                 óD  — | j                   j                  dd«       | j                   j                  «       }t        | j                  «      dk(  r'| j
                  s| j                  | j                   «       	 | j                  | j                   «       | j                  |«      }| j                  | j                   «       | j                   j                  «        | j                   j                  «       | _        |S # t        $ r | j                   j                  |«       ‚ w xY w)z;Append message to mailbox and return (start, stop) offsets.r   rH  )rY  r    ro  r  rÌ   r[  rq  rs  Ú_install_messageru  rÔ   Útruncater}   r^  )r   r+   ÚbeforeÚoffsetss       r"   r`  z"_singlefileMailbox._append_messageñ  s×   € à�
‰
�‰˜˜1ÔØ—‘—‘Ó"ˆÜˆt�y‰y‹>˜QÒ t§}¢}ð
 ×"Ñ" 4§:¡:Ô.ð	Ø×"Ñ" 4§:¡:Ô.Ø×+Ñ+¨GÓ4ˆGØ×#Ñ# D§J¡JÔ/ð 	�
‰
×ÑÔØ ŸJ™JŸO™OÓ-ˆÔØˆøô ò 	Ø�J‰J×Ñ Ô'Øð	ús   Á7AC9 Ã9&Dr¸   r4   )rº   r»   r¼   r½   r#   r,   r2   r=   rW   rj   rm   r€   rƒ   r}   rq  rs  ru  r†   rî   r`  rÀ   r$   r"   rS  rS  A  sX   „ Ù ó!ò."òòò$ò
 ò
ò
 ò!òB2òHòòò	#óJór$   rS  c                   ó8   — e Zd ZdZdZd„ Zd	d„Zd	d„Zd	d„Zd„ Z	y)
Ú	_mboxMMDFzAn mbox or MMDF mailbox.Tc                 óÞ  — | j                  |«      \  }}| j                  j                  |«       | j                  j                  «       j	                  t
        d«      j                  d«      }| j                  j                  || j                  j                  «       z
  «      }| j                  |j	                  t
        d«      «      }|j                  |«       |j                  |dd «       |S )rI   r$   r   r�   r˜   N)rî   rY  r    r­   r¡   r¢   Údecoder�   ro  Ú_message_factoryÚset_unixfromÚset_from)r   r1   r~  r  Ú	from_lineÚstringr  s          r"   rC   z_mboxMMDF.get_message  s°   € à—l‘l 3Ó'‰ˆˆtØ�
‰
�‰˜ÔØ—J‘J×'Ñ'Ó)×1Ñ1´'¸3Ó?×FÑFÀwÓOˆ	Ø—‘—‘ ¨¯
©
¯©Ó(9Ñ!9Ó:ˆØ×#Ñ# F§N¡N´7¸EÓ$BÓCˆØ×Ñ˜Ô#Ø�‰�Y˜q˜r�]Ô#Øˆ
r$   c                 ól   — t        j                  | j                  ||«      «      j                  |¬«      S )ú3Return a string representation or raise a KeyError.)ÚunixfromrK   )r   r1   Úfrom_s      r"   rP   z_mboxMMDF.get_string  s0   € ä×'Ñ'Ø�N‰N˜3 Ó&ó(ß(1©	¸5¨	Ó(Að	Br$   c                 ó0  — | j                  |«      \  }}| j                  j                  |«       |s| j                  j                  «        | j                  j	                  || j                  j                  «       z
  «      }|j                  t        d«      S )rœ  r�   )rî   rY  r    r­   r�   ro  r¡   r¢   )r   r1   rž  r~  r  rš  s         r"   rN   z_mboxMMDF.get_bytes  sj   € à—l‘l 3Ó'‰ˆˆtØ�
‰
�‰˜ÔÙØ�J‰J×ÑÔ!Ø—‘—‘ ¨¯
©
¯©Ó(9Ñ!9Ó:ˆØ�~‰~œg uÓ-Ð-r$   c                 óö   — | j                  |«      \  }}| j                  j                  |«       |s| j                  j                  «        t	        | j                  | j                  j                  «       |«      S )rS   )rî   rY  r    r­   Ú_PartialFilero  )r   r1   rž  r~  r  s        r"   rF   z_mboxMMDF.get_file&  sU   € à—l‘l 3Ó'‰ˆˆtØ�
‰
�‰˜ÔÙØ�J‰J×ÑÔ!Ü˜DŸJ™J¨¯
©
¯©Ó(9¸4Ó@Ð@r$   c                 óJ  — d}t        |t        «      r| j                  |«      }t        |t        «      r:|j	                  d«      r)|j                  d«      }|dk7  r|d| }||dz   d }n�|}d}n|t        |t        «      r%|j                  «       j                  d«      }d|z   }nGt        |t        j                  j                  «      r#|j                  «       }|�|j                  d«      }|€8dt        j                  t        j                  «       «      j                  «       z   }| j                   j#                  «       }| j                   j%                  |t&        z   «       | j)                  || j                   | j*                  «       | j                   j#                  «       }||fS )	z1Format a message and blindly write to self._file.Nr—   r�   r–   r  r$   r   s   From MAILER-DAEMON )rš   r¦   r‹   r§   r®   ÚfindÚ_mboxMMDFMessageÚget_fromrˆ   rL   r+   r
   Úget_unixfromr7  ÚasctimeÚgmtimerY  ro  r£   r¢   r·   Ú_mangle_from_)r   r+   r™  ÚnewlineÚauthorr~  r  s          r"   rŽ  z_mboxMMDF._install_message.  s^  € àˆ	Ü�gœsÔ#Ø×+Ñ+¨GÓ4ˆGÜ�gœuÔ%¨'×*<Ñ*<¸XÔ*FØ—l‘l 5Ó)ˆGØ˜"Š}Ø# H WÐ-�	Ø! '¨A¡+ ,Ð/‘à#�	Ø‘Ü˜Ô!1Ô2Ø×%Ñ%Ó'×.Ñ.¨wÓ7ˆFØ  6Ñ)‰IÜ˜¤§¡×!6Ñ!6Ô7Ø×,Ñ,Ó.ˆIØÐ$Ø%×,Ñ,¨WÓ5�	ØÐØ.´·±¼d¿k¹k»mÓ1L×1SÑ1SÓ1UÑUˆIØ—
‘
—‘Ó!ˆØ�
‰
×Ñ˜¤WÑ,Ô-Ø×Ñ˜7 D§J¡J°×0BÑ0BÔCØ�z‰z�‰Ó ˆØ�tˆ}Ðr$   Nr¹   )
rº   r»   r¼   r½   r©  rC   rP   rN   rF   rŽ  rÀ   r$   r"   r“  r“    s%   „ Ù"à€Mò	óBó
.óAór$   r“  c                   ó,   — e Zd ZdZdZdZdd„Zd„ Zd„ Zy)r   zA classic mbox mailbox.TNc                 óJ   — t         | _        t        j                  | |||«       y)zInitialize an mbox mailbox.N)r   r–  r“  r#   r   s       r"   r#   zmbox.__init__T  ó   € ä +ˆÔÜ×Ñ˜4  w°Õ7r$   c                 ó.   — |j                  t        «       yrˆ  ©r£   r¢   r„  s     r"   ru  zmbox._post_message_hookY  s   € à	�‰”Õr$   c                 óØ  — g g }}d}| j                   j                  d«       	 | j                   j                  «       }| j                   j                  «       }|j	                  d«      r`t        |«      t        |«      k  r5|r"|j                  |t        t        «      z
  «       n|j                  |«       |j                  |«       d}nF|s6|r"|j                  |t        t        «      z
  «       n|j                  |«       n|t        k(  rd}nd}Œìt        t        t        ||«      «      «      | _        t        | j                  «      | _        | j                   j                  «       | _        y)ú0Generate key-to-(start, stop) table of contents.Fr   Tr—   N)rY  r    ro  r­   r®   r  r  r¢   ÚdictÚ	enumerateÚziprÌ   rZ  r^  )r   ÚstartsÚstopsÚlast_was_emptyÚline_posr¶   s         r"   rŒ  zmbox._generate_toc]  s  € à˜B�ˆØˆØ�
‰
�‰˜ÔØØ—z‘z—‘Ó(ˆHØ—:‘:×&Ñ&Ó(ˆDØ�‰˜xÔ(Ü�u“:¤ F£Ò+Ù%ØŸ™ X´´G³Ñ%<Õ=ð
 Ÿ™ XÔ.Ø—‘˜hÔ'Ø!&‘ÙÙ!Ø—L‘L ¬C´«LÑ!8Õ9à—L‘L Ô*ØØœ’Ø!%‘à!&�ð/ ô0 œ¤3 v¨uÓ#5Ó6Ó7ˆŒ	Ü˜TŸY™Y›ˆŒØ ŸJ™JŸO™OÓ-ˆÕr$   r¸   )	rº   r»   r¼   r½   r©  r¤   r#   ru  rŒ  rÀ   r$   r"   r   r   K  s    „ Ù!à€Mð €Oó8ò
ó.r$   r   c                   ó*   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zy)r	   zAn MMDF mailbox.Nc                 óJ   — t         | _        t        j                  | |||«       y)zInitialize an MMDF mailbox.N)r   r–  r“  r#   r   s       r"   r#   zMMDF.__init__‚  r®  r$   c                 ó4   — |j                  dt        z   «       y)r†  ó   Nr°  r„  s     r"   rs  zMMDF._pre_message_hook‡  s   € à	�‰Ð#¤gÑ-Õ.r$   c                 óB   — |j                  t        dz   t        z   «       y)r‰  r½  Nr°  r„  s     r"   ru  zMMDF._post_message_hook‹  s   € à	�‰”Ð-Ñ-´Ñ7Õ8r$   c                 óò  — g g }}| j                   j                  d«       d}	 |}| j                   j                  «       }| j                   j                  «       }|j	                  dt
        z   «      r‹|j                  |«       	 |}| j                   j                  «       }| j                   j                  «       }|dt
        z   k(  r"|j                  |t        t
        «      z
  «       n|s|j                  |«       nŒy|snŒÝt        t        t        ||«      «      «      | _        t        | j                  «      | _        | j                   j                  dd«       | j                   j                  «       | _        y)r²  r   r½  rH  N)rY  r    r­   ro  r®   r¢   r  r  r³  r´  rµ  rÌ   rZ  r^  )r   r¶  r·  Únext_posr¹  r¶   s         r"   rŒ  zMMDF._generate_toc�  s*  € à˜B�ˆØ�
‰
�‰˜ÔØˆØØˆHØ—:‘:×&Ñ&Ó(ˆDØ—z‘z—‘Ó(ˆHØ�‰Ð2´WÑ<Ô=Ø—‘˜hÔ'ØØ'�HØŸ:™:×.Ñ.Ó0�DØ#Ÿz™zŸ™Ó0�HØÐ2´WÑ<Ò<ØŸ™ X´´G³Ñ%<Ô=ØÙ!ØŸ™ XÔ.Øð ñ Øð# ô$ œ¤3 v¨uÓ#5Ó6Ó7ˆŒ	Ü˜TŸY™Y›ˆŒØ�
‰
�‰˜˜1ÔØ ŸJ™JŸO™OÓ-ˆÕr$   r¸   )rº   r»   r¼   r½   r#   rs  ru  rŒ  rÀ   r$   r"   r	   r	     s   „ Ùó8ò
/ò9ó.r$   r	   c                   ó–   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r   zAn MH mailbox.Nc                 ó  — t         j                  | |||«       t        j                  j	                  | j
                  «      sÁ|rªt        j                  | j
                  d«       t        j                  t        j                  t        j                  j                  | j
                  d«      t        j                  t        j                  z  t        j                  z  d«      «       d| _        yt        | j
                  «      ‚d| _        y)zInitialize an MH instance.rÇ   ú.mh_sequencesi€  FN)r   r#   r   r   rÊ   r   rË   r†   rú   rÈ   r)  ÚO_EXCLr*  r   r]  r   s       r"   r#   zMH.__init__¯  s©   € ä×Ñ˜˜t W¨fÔ5Ü�w‰w�~‰~˜dŸj™jÔ)ÙÜ—‘˜Ÿ™ UÔ+Ü—‘œŸ™¤§¡§¡¨d¯j©j¸/Ó!JÜ!#§¡¬b¯i©iÑ!7¼"¿+¹+Ñ!EÀuóNô Oð ˆ�ô )¨¯©Ó4Ð4Øˆ�r$   c                 ó¸  — | j                  «       }t        |«      dk(  rd}nt        |«      dz   }t        j                  j                  | j                  t        |«      «      }t        |«      }d}	 | j                  rt        |«       	 	 | j                  ||«       t!        |t"        «      r| j%                  ||«       | j                  rt        |«       	 |st        |«       |S # t        $ r; | j                  rt        |«       t        |«       d}t        j                  |«       ‚ w xY w# | j                  rt        |«       w w xY w# |st        |«       w w xY w)r&   r   r  FT)rZ   r  Úmaxr   r   rÈ   r   r¦   rD  r]  rg  r·   rÔ   rj  rÖ   r2   rš   r   Ú_dump_sequences)r   r+   rZ   Únew_keyr÷   r   Úcloseds          r"   r,   zMH.add»  s  € à�y‰y‹{ˆÜˆt‹9˜Š>Ø‰Gä˜$“i !‘mˆGÜ—7‘7—<‘< §
¡
¬C°«LÓ9ˆÜ˜hÓ'ˆØˆð	Ø�|Š|Ü˜1”ð$ð	Ø×&Ñ& w°Ô2ô ˜g¤yÔ1Ø×(Ñ(¨°'Ô:à—<’<Ü  •OáÜ˜A”Øˆøô! %ò à—|’|Ü$ QœÜ ”NØ!�FÜ—I‘I˜hÔ'Øðûð —<’<Ü  •Oð  ûñ Ü˜A•ð ús7   Á1E	 Â
C% Â"D, Â>E	 Ã%AD)Ä)D, Ä,EÅE	 Å	Ec                 óH  — t         j                  j                  | j                  t	        |«      «      }	 t        |d«      }|j                  «        t        j                  |«       y# t        $ r1}|j                  t        j                  k(  rt        d|z  «      ‚‚ d}~ww xY w)r/   rU  rM  N)r   r   rÈ   r   r¦   rú   r†   r2   rã   rä   rV  r8   )r   r1   r   r   rë   s        r"   r2   z	MH.removeÝ  s{   € ä�w‰w�|‰|˜DŸJ™J¬¨C«Ó1ˆð		Ü�T˜5Ó!ˆAð �G‰GŒIÜ�I‰I�d�Oøô ò 	Ø�w‰wœ%Ÿ,™,Ò&ÜÐ8¸3Ñ>Ó?Ð?àûð		ús   µA' Á'	B!Á0,BÂB!c                 óÈ  — t         j                  j                  | j                  t	        |«      «      }	 t        |d«      }	 | j                  rt        |«       	 t        j                  t        j
                  |t         j                  t         j                  z  «      «       | j                  ||«       t!        |t"        «      r| j%                  ||«       | j                  rt'        |«       	 t)        |«       y# t        $ r1}|j                  t        j                  k(  rt        d|z  «      ‚‚ d}~ww xY w# | j                  rt'        |«       w w xY w# t)        |«       w xY w)r;   rU  rM  N)r   r   rÈ   r   r¦   rú   rã   rä   rV  r8   r]  rg  r†   r*  ÚO_TRUNCr·   rš   r   rÇ  rj  rÖ   )r   r1   r+   r   r   rë   s         r"   r=   zMH.__setitem__ë  s   € ä�w‰w�|‰|˜DŸJ™J¬¨C«Ó1ˆð	Ü�T˜5Ó!ˆAð	Ø�|Š|Ü˜1”ð$Ü—‘œŸ™ ¤r§{¡{´R·Z±ZÑ'?Ó@ÔAØ×"Ñ" 7¨AÔ.Ü˜g¤yÔ1Ø×(Ñ(¨°#Ô6à—<’<Ü  •Oä˜�Nøô# ò 	Ø�w‰wœ%Ÿ,™,Ò&ÜÐ8¸3Ñ>Ó?Ð?àûð		ûð —<’<Ü  •Oð  ûô ˜�Nús<   µC: ÁE ÁA<D7 ÃE Ã:	D4Ä,D/Ä/D4Ä7EÅE ÅE!c                 óæ  — 	 | j                   r>t        t        j                  j	                  | j
                  t        |«      «      d«      }n=t        t        j                  j	                  | j
                  t        |«      «      d«      }|5  | j                   rt        |«       	 t        |«      }| j                   rt        |«       	 ddd«       | j                  «       j                  «       D ]  \  }}||v sŒj!                  |«       Œ S # t        $ r1}|j                  t        j                  k(  rt        d|z  «      ‚‚ d}~ww xY w# | j                   rt        |«       w w xY w# 1 sw Y   Œ¡xY w)rI   rU  rù   rM  N)r]  rú   r   r   rÈ   r   r¦   rã   rä   rV  r8   rg  r   rj  Úget_sequencesrg   Úadd_sequence)r   r1   r   rë   r  rÕ   Úkey_lists          r"   rC   zMH.get_message  s'  € ð		Ø�|Š|ÜœŸ™Ÿ™ d§j¡j´#°c³(Ó;¸UÓC‘äœŸ™Ÿ™ d§j¡j´#°c³(Ó;¸TÓB�ð ñ 	$Ø�|Š|Ü˜1”ð$Ü “l�à—<’<Ü  •O÷	$ð #×0Ñ0Ó2×8Ñ8Ó:ò 	'‰NˆD�(Ø�hŠØ× Ñ  Õ&ð	'ð ˆ
øô! ò 	Ø�w‰wœ%Ÿ,™,Ò&ÜÐ8¸3Ñ>Ó?Ð?àûð		ûð —<’<Ü  •Oð  ú÷	$ð 	$ús<   ‚BD ÂE'Â$E
Â/E'Ä	EÄ,EÅEÅ
E$Å$E'Å'E0c                 óœ  — 	 | j                   r>t        t        j                  j	                  | j
                  t        |«      «      d«      }n=t        t        j                  j	                  | j
                  t        |«      «      d«      }|5  | j                   rt        |«       	 |j                  «       j                  t        d«      | j                   rt        |«       cddd«       S # t        $ r1}|j                  t        j                  k(  rt        d|z  «      ‚‚ d}~ww xY w# | j                   rt        |«       w w xY w# 1 sw Y   yxY w)r  rU  rù   rM  Nr�   )r]  rú   r   r   rÈ   r   r¦   rã   rä   rV  r8   rg  r�   r¡   r¢   rj  ©r   r1   r   rë   s       r"   rN   zMH.get_bytes  sö   € ð		Ø�|Š|ÜœŸ™Ÿ™ d§j¡j´#°c³(Ó;¸UÓC‘äœŸ™Ÿ™ d§j¡j´#°c³(Ó;¸TÓB�ð ñ 	$Ø�|Š|Ü˜1”ð$Ø—v‘v“x×'Ñ'¬°Ó7à—<’<Ü  ”O÷	$ñ 	$øô ò 	Ø�w‰wœ%Ÿ,™,Ò&ÜÐ8¸3Ñ>Ó?Ð?àûð		ûð —<’<Ü  •Oð  ú÷	$ð 	$ús<   ‚BC( ÂEÂ$#D%ÃEÃ(	D"Ã1,DÄD"Ä%D?Ä?EÅEc                 ó  — 	 t        t        j                  j                  | j                  t        |«      «      d«      }t        |«      S # t        $ r1}|j                  t        j                  k(  rt        d|z  «      ‚‚ d}~ww xY w)rS   rù   rM  N)rú   r   r   rÈ   r   r¦   rã   rä   rV  r8   r  rÒ  s       r"   rF   zMH.get_file1  sl   € ð	Ü”R—W‘W—\‘\ $§*¡*¬c°#«hÓ7¸Ó>ˆAô ˜!‹}Ðøô ò 	Ø�w‰wœ%Ÿ,™,Ò&ÜÐ8¸3Ñ>Ó?Ð?àûð		ús   ‚=A
 Á
	BÁ,A?Á?Bc                 ór   — t        t        d„ t        j                  | j                  «      D «       «      «      S )rU   c              3   óR   K  — | ]  }|j                  «       rt        |«      –— Œ! y ­wr4   )Úisdigitr@  )Ú.0r  s     r"   ú	<genexpr>zMH.iterkeys.<locals>.<genexpr>>  s$   è ø€ ò :¨%Ø).¯©¬ô ˜uŸ:ñ :ùs   ‚%')Úiterrr  r   r  r   rV   s    r"   rW   zMH.iterkeys<  s/   € ä”Fñ :´2·:±:¸d¿j¹jÓ3Iô :ó :ó ;ð 	;r$   c                 ó¢   — t         j                  j                  t         j                  j                  | j                  t        |«      «      «      S r  )r   r   rÊ   rÈ   r   r¦   r0   s     r"   rj   zMH.__contains__A  s,   € ä�w‰w�~‰~œbŸg™gŸl™l¨4¯:©:´s¸3³xÓ@ÓAÐAr$   c                 óF   — t        t        | j                  «       «      «      S r  )r  rY   rW   rV   s    r"   rm   z
MH.__len__E  s   € ä”4˜Ÿ™›Ó(Ó)Ð)r$   c                 óÈ   — | j                   sVt        t        j                  j	                  | j
                  d«      d«      | _        t        | j                  «       d| _         yy)r   rÃ  rU  TN)r]  rú   r   r   rÈ   r   rY  rg  rV   s    r"   r€   zMH.lockI  sB   € à�|Š|ÜœbŸg™gŸl™l¨4¯:©:°ÓGÈÓOˆDŒJÜ�t—z‘zÔ"ØˆD�Lð r$   c                 ó„   — | j                   r4t        | j                  «       t        | j                  «       | `d| _         yyri  )r]  rj  rY  rÖ   rV   s    r"   rƒ   z	MH.unlockP  s2   € à�<Š<Ü˜Ÿ™Ô$Ü˜Ÿ
™
Ô#Ø�
Ø ˆD�Lð	 r$   c                  ó   — y)r|   NrÀ   rV   s    r"   r}   zMH.flushX  r  r$   c                 ó>   — | j                   r| j                  «        yyr  )r]  rƒ   rV   s    r"   r†   zMH.close\  s   € à�<Š<Ø�K‰K�Mð r$   c                 ó  — g }t        j                  | j                  «      D ][  }t         j                  j	                  t         j                  j                  | j                  |«      «      sŒK|j                  |«       Œ] |S )r  )r   r  r   r   r  rÈ   r  r  s      r"   r  zMH.list_foldersa  sY   € àˆÜ—Z‘Z §
¡
Ó+ò 	%ˆEÜ�w‰w�}‰}œRŸW™WŸ\™\¨$¯*©*°eÓ<Õ=Ø—‘˜eÕ$ð	%ð ˆr$   c                 ó‚   — t        t        j                  j                  | j                  |«      | j
                  d¬«      S )z+Return an MH instance for the named folder.Fr!  ©r   r   r   rÈ   r   r   r"  s     r"   r$  zMH.get_folderi  s-   € ä”"—'‘'—,‘,˜tŸz™z¨6Ó2ØŸ-™-°ô7ð 	7r$   c                 ó€   — t        t        j                  j                  | j                  |«      | j
                  ¬«      S )z:Create a folder and return an MH instance representing it.r&  râ  r"  s     r"   r,  zMH.add_foldern  s+   € ä”"—'‘'—,‘,˜tŸz™z¨6Ó2ØŸ-™-ô)ð 	)r$   c                 ó\  — t         j                  j                  | j                  |«      }t        j                  |«      }|dgk(  r4t        j
                  t         j                  j                  |d«      «       n|g k(  rnt        d| j                  z  «      ‚t        j                  |«       y)r.  rÃ  zFolder not empty: %sN)r   r   rÈ   r   r  r2   r   r1  )r   r#  r   Úentriess       r"   r5  zMH.remove_folders  sx   € ä�w‰w�|‰|˜DŸJ™J¨Ó/ˆÜ—*‘*˜TÓ"ˆØ�Ð'Ò'Ü�I‰I”b—g‘g—l‘l 4¨Ó9Õ:Ø˜Š]ØäÐ 6¸¿¹Ñ CÓDÐDÜ
�‰��r$   c           
      óØ  — i }t        t        j                  j                  | j                  d«      dd¬«      5 }t        | j                  «       «      }|D ]Î  }	 |j                  d«      \  }}t        «       }|j                  «       D ]f  }|j                  «       r|j                  t        |«      «       Œ.d„ |j                  d«      D «       \  }	}
|j                  t        |	|
dz   «      «       Œh t        |«      D �cg c]  }||v r|‘Œ
 c}||<   t        ||   «      d	k(  r||= ŒÐ 	 ddd«       |S c c}w # t        $ r t!        d
|j#                  «       z  «      ‚w xY w# 1 sw Y   |S xY w)z=Return a name-to-key-list dictionary to define each sequence.rÃ  ÚrÚASCII©ÚencodingrÂ   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr4   )r@  )r×  Úxs     r"   rØ  z#MH.get_sequences.<locals>.<genexpr>Œ  s   è ø€ Ò*K°a¬3¨q¯6Ñ*Kùs   ‚ú-r  r   z"Invalid sequence specification: %sN)rú   r   r   rÈ   r   ÚsetrZ   rÛ   rÖ  r,   r@  rz   Úrangerr  r  rŠ   r   Úrstrip)r   Úresultsr   Úall_keysr¶   rÕ   ÚcontentsrZ   Úspecr~  r  r1   s               r"   rÎ  zMH.get_sequences  sV  € àˆÜ”"—'‘'—,‘,˜tŸz™z¨?Ó;¸SÈ7ÔSð 	5ÐWXÜ˜4Ÿ9™9›;Ó'ˆHØò 5�ð5Ø%)§Z¡Z°£_‘N�D˜(Ü›5�DØ (§¡Ó 0ò @˜ØŸ<™<œ>Ø ŸH™H¤S¨£YÕ/á*K¸4¿:¹:Àc»?Ô*K™K˜E 4Ø ŸK™K¬¨e°T¸A±XÓ(>Õ?ð@ô 5;¸4³Lö %=¨SØ,/°8©Oò &)ò %=�G˜D‘Mä˜7 4™=Ó)¨QÒ.Ø# D˜Møñ5÷	5ð& ˆùò%=øô "ò 5Ü%Ð&JØ&*§k¡k£mñ'4ó 5ð 5ð5ú÷!	5ð& ˆús6   ¹EÁB$D6Ã=D1Ä
D6Ä$EÄ1D6Ä6&EÅEÅE)c                 óþ  — t        t        j                  j                  | j                  d«      dd¬«      }	 t        j
                  t        j                   |j                  t        j                  t        j                  z  «      «       |j                  «       D ]Å  \  }}t        |«      dk(  rŒ|j                  |dz   «       d}d}t        t        |«      «      D ]Q  }|d	z
  |k(  r|sCd
}|j                  d«       n/|rd}|j                  |›d|›�«       n|j                  d|z  «       |}ŒS |r|j                  t        |«      dz   «       Œµ|j                  d«       ŒÇ 	 t        |«       y# t        |«       w xY w)z:Set sequences using the given name-to-key-list dictionary.rÃ  zr+rè  ré  r   rÂ   NFr  Trí  ú z %sú
)rú   r   r   rÈ   r   r†   rÕ   r*  rÌ  rg   r  r£   rr  rî  r¦   rÖ   )r   Ú	sequencesr   rÕ   rZ   ÚprevÚ
completingr1   s           r"   Úset_sequenceszMH.set_sequences—  s,  € ä”—‘—‘˜dŸj™j¨/Ó:¸DÈ7ÔSˆð	Ü�H‰H”R—W‘W˜QŸV™V¤R§[¡[´2·:±:Ñ%=Ó>Ô?Ø'Ÿo™oÓ/ò "‘
��dÜ�t“9 ’>ØØ—‘˜˜s™
Ô#Ø�Ø"�
Ü!¤# d£)Ó,ò 
�CØ˜Q‘w $’Ù)Ø)-˜JØŸG™G C�LÙ#Ø%*˜
ØŸ™ª4±Ð 5Õ6àŸ™ ¨¡Ô,Ø‘Dð
ñ Ø—G‘GœC ›I¨Ñ,Õ-à—G‘G˜D•Mñ)"ô, ˜�NøŒK˜�Nús   ¸D*E/ Å/E<c                 ó
  — | j                  «       }d}g }| j                  «       D ]ç  }|dz
  |k7  rØ|j                  ||dz   f«       	 t        j                  t        j
                  j                  | j                  t        |«      «      t        j
                  j                  | j                  t        |dz   «      «      «       t        j                  t        j
                  j                  | j                  t        |«      «      «       |dz  }Œé |dz   | _        t        |«      dk(  ry|j                  «       D ](  \  }}|D ]  \  }}||v sŒ|||j!                  |«      <   Œ  Œ* | j#                  |«       y# t        t        f$ r~ t        j                  t        j
                  j                  | j                  t        |«      «      t        j
                  j                  | j                  t        |dz   «      «      «       Y Œùw xY w)z?Re-name messages to eliminate numbering gaps. Invalidates keys.r   r  N)rÎ  rW   r  r   rß   r   rÈ   r   r¦   Úunlinkrà   rá   râ   rZ  r  rg   Úindexrû  )	r   rø  rù  Úchangesr1   rÕ   rÐ  ÚoldrÅ   s	            r"   ÚpackzMH.pack´  s•  € à×&Ñ&Ó(ˆ	ØˆØˆØ—=‘=“?ò 	ˆCØ�Q‰w˜$ŠØ—‘  T¨A¡X˜Ô/ðBÜ—G‘GœBŸG™GŸL™L¨¯©´S¸³XÓ>ÜŸG™GŸL™L¨¯©´S¸À¹³]ÓCôEô —I‘IœbŸg™gŸl™l¨4¯:©:´s¸3³xÓ@ÔAØ�A‰I‰Dð	ð  ™ˆŒÜˆw‹<˜1ÒØØ'Ÿo™oÓ/ò 	8‰NˆD�(Ø#ò 8‘��SØ˜(’?Ø47�H˜XŸ^™^¨CÓ0Ò1ñ8ð	8ð 	×Ñ˜9Õ%øô '¬Ð8ò GÜ—I‘IœbŸg™gŸl™l¨4¯:©:´s¸3³xÓ@Ü Ÿg™gŸl™l¨4¯:©:´s¸4À!¹8³}ÓEöGðGús   ÁA;E5Å5B
HÈHc                 ó  — |j                  «       }| j                  «       }|j                  «       D ]2  \  }}||v r|j                  |«       Œ||v sŒ!||j                  |«      = Œ4 |D ]  }||vsŒ|g||<   Œ | j	                  |«       y)z;Inspect a new MHMessage and update sequences appropriately.N)rÎ  rg   r  rþ  rû  )r   r+   r1   Úpending_sequencesÚall_sequencesrÕ   rÐ  Úsequences           r"   rÇ  zMH._dump_sequencesÎ  s�   € à#×1Ñ1Ó3ÐØ×*Ñ*Ó,ˆØ+×1Ñ1Ó3ò 	2‰NˆD�(ØÐ(Ñ(Ø—‘ Õ$Ø˜’Ø˜XŸ^™^¨CÓ0Ñ1ð		2ð
 *ò 	0ˆHØ˜}Ò,Ø+.¨%�˜hÒ'ð	0ð 	×Ñ˜=Õ)r$   r¸   )rº   r»   r¼   r½   r#   r,   r2   r=   rC   rN   rF   rW   rj   rm   r€   rƒ   r}   r†   r  r$  r,  r5  rÎ  rû  r  rÇ  rÀ   r$   r"   r   r   ¬  su   „ Ùó
ò òDòò0ò2$ò*	ò;ò
Bò*ò ò!òòò
ò7ò
)ò

òò0ò:&ó4*r$   r   c                   ót   — e Zd ZdZ eh d£«      Zdd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r   zAn Rmail-style Babyl mailbox.>   ÚfiledÚeditedÚresentÚunseenÚdeletedÚansweredÚ	forwardedNc                 óB   — t         j                  | |||«       i | _        y)zInitialize a Babyl mailbox.N)rS  r#   Ú_labelsr   s       r"   r#   zBabyl.__init__ã  s   € ä×#Ñ# D¨$°¸Ô@Øˆ�r$   c                 óŒ   — t         j                  | |«      }t        |t        «      r|j	                  «       | j
                  |<   |S )r&   )rS  r,   rš   r   Ú
get_labelsr  )r   r+   r1   s      r"   r,   z	Babyl.addè  s:   € ä ×$Ñ$ T¨7Ó3ˆÜ�gœ|Ô,Ø '× 2Ñ 2Ó 4ˆD�L‰L˜ÑØˆ
r$   c                 óh   — t         j                  | |«       || j                  v r| j                  |= yyrí   )rS  r2   r  r0   s     r"   r2   zBabyl.removeï  s/   € ä×!Ñ! $¨Ô,Ø�$—,‘,ÑØ—‘˜SÑ!ð r$   c                 óŽ   — t         j                  | ||«       t        |t        «      r|j	                  «       | j
                  |<   yy)r;   N)rS  r=   rš   r   r  r  r<   s      r"   r=   zBabyl.__setitem__õ  s:   € ä×&Ñ& t¨S°'Ô:Ü�gœ|Ô,Ø '× 2Ñ 2Ó 4ˆD�L‰L˜Òð -r$   c                 óš  — | j                  |«      \  }}| j                  j                  |«       | j                  j                  «        t	        j
                  «       }	 | j                  j                  «       }|dt        z   k(  s|sn&|j                  |j                  t        d«      «       ŒOt	        j
                  «       }	 | j                  j                  «       }|t        k(  s|sn&|j                  |j                  t        d«      «       ŒL|| j                  j                  «       z
  }|dk\  sJ ‚| j                  j                  |«      }|j                  t        d«      }t        |j                  «       |z   «      }	|	j                  |j                  «       «       || j                  v r|	j                  | j                  |   «       |	S )rI   ó   *** EOOH ***r�   r   )rî   rY  r    r­   r›   rœ   r¢   r£   r¡   ro  r�   r   r¬   Úset_visibler  Ú
set_labels)
r   r1   r~  r  Úoriginal_headersr¶   Úvisible_headersÚnÚbodyr  s
             r"   rC   zBabyl.get_messageû  si  € à—l‘l 3Ó'‰ˆˆtØ�
‰
�‰˜ÔØ�
‰
×ÑÔÜŸ:™:›<ÐØØ—:‘:×&Ñ&Ó(ˆDØ�¬Ñ0Ò0¹ØØ×"Ñ" 4§<¡<´¸Ó#?Ô@ð	 ô
 Ÿ*™*›,ˆØØ—:‘:×&Ñ&Ó(ˆDØ”wŠ¡dØØ×!Ñ! $§,¡,¬w¸Ó">Ô?ð	 ð �4—:‘:—?‘?Ó$Ñ$ˆØ�AŠvˆˆvØ�z‰z�‰˜qÓ!ˆØ�|‰|œG UÓ+ˆÜÐ+×4Ñ4Ó6¸Ñ=Ó>ˆØ�‰˜×0Ñ0Ó2Ô3Ø�$—,‘,ÑØ�N‰N˜4Ÿ<™<¨Ñ,Ô-Øˆ
r$   c                 ó€  — | j                  |«      \  }}| j                  j                  |«       | j                  j                  «        t	        j
                  «       }	 | j                  j                  «       }|dt        z   k(  s|sn&|j                  |j                  t        d«      «       ŒO	 | j                  j                  «       }|t        k(  s|snŒ'|j                  «       }|| j                  j                  «       z
  }|dk\  sJ ‚| j                  j                  |«      }|j                  t        d«      }||z   S )rœ  r  r�   r   )rî   rY  r    r­   r›   rœ   r¢   r£   r¡   r¬   ro  r�   )	r   r1   r~  r  r  r¶   Úheadersr  r´   s	            r"   rN   zBabyl.get_bytes  s	  € à—l‘l 3Ó'‰ˆˆtØ�
‰
�‰˜ÔØ�
‰
×ÑÔÜŸ:™:›<ÐØØ—:‘:×&Ñ&Ó(ˆDØ�¬Ñ0Ò0¹ØØ×"Ñ" 4§<¡<´¸Ó#?Ô@ð	 ð
 Ø—:‘:×&Ñ&Ó(ˆDØ”wŠ¡dØð ð #×+Ñ+Ó-ˆØ�4—:‘:—?‘?Ó$Ñ$ˆØ�AŠvˆˆvØ�z‰z�‰˜qÓ!ˆØ�|‰|œG UÓ+ˆØ˜‰~Ðr$   c                 ór   — t        j                  | j                  |«      j                  dt        «      «      S )rS   r�   )r›   rœ   rN   r¡   r¢   r0   s     r"   rF   zBabyl.get_file-  s'   € ä�z‰z˜$Ÿ.™.¨Ó-×5Ñ5°e¼WÓEÓFÐFr$   c                 óâ   — | j                  «        t        «       }| j                  j                  «       D ]  }|j	                  |«       Œ |j                  | j                  «       t        |«      S )z4Return a list of user-defined labels in the mailbox.)rî   rî  r  rc   rz   Údifference_updateÚ_special_labelsrY   )r   ÚlabelsÚ
label_lists      r"   r  zBabyl.get_labels1  sX   € à�‰ŒÜ“ˆØŸ,™,×-Ñ-Ó/ò 	&ˆJØ�M‰M˜*Õ%ð	&à× Ñ  ×!5Ñ!5Ô6Ü�F‹|Ðr$   c                 ó@  — g g }}| j                   j                  d«       d}g }	 |}| j                   j                  «       }| j                   j                  «       }|dt        z   k(  r²t        |«      t        |«      k  r!|j                  |t        t        «      z
  «       |j                  |«       | j                   j                  «       dd j                  d«      D �cg c]"  }|j                  «       r|j                  «       ‘Œ$ }}|j                  |«       nn|dk(  s|dt        z   k(  r9t        |«      t        |«      k  rF|j                  |t        t        «      z
  «       n$|s"|j                  |t        t        «      z
  «       n�Œdt        t        t        ||«      «      «      | _        t        t        |«      «      | _        t        | j                  «      | _        | j                   j                  dd«       | j                   j                  «       | _        yc c}w )r²  r   s   r  Nó   ,ó   rH  )rY  r    r­   ro  r¢   r  r  rÛ   Ústripr³  r´  rµ  rÌ   r  rZ  r^  )	r   r¶  r·  rÀ  Úlabel_listsr¹  r¶   Úlabelr"  s	            r"   rŒ  zBabyl._generate_toc:  s£  € à˜B�ˆØ�
‰
�‰˜ÔØˆØˆØØˆHØ—:‘:×&Ñ&Ó(ˆDØ—z‘z—‘Ó(ˆHØ�{¤WÑ,Ò,Ü�u“:¤ F£Ò+Ø—L‘L ¬C´«LÑ!8Ô9Ø—‘˜hÔ'à+/¯:©:×+>Ñ+>Ó+@ÀÀÐ+D×+JÑ+JÈ4Ó+Pö:¨Eà+0¯;©;¬=ð  Ÿ+™+�-ð :�ð :ð ×"Ñ" 6Õ*Ø˜’ D¨G´gÑ,=Ò$=Ü�u“:¤ F£Ò+Ø—L‘L ¬C´«LÑ!8Õ9ÙØ—‘˜X¬¬G«Ñ4Ô5Øñ# ô$ œ¤3 v¨uÓ#5Ó6Ó7ˆŒ	ÜœI kÓ2Ó3ˆŒÜ˜TŸY™Y›ˆŒØ�
‰
�‰˜˜1ÔØ ŸJ™JŸO™OÓ-ˆÕùò:s   Ã'Hc                 óÈ   — dt         z   }|dt         z   z  }| j                  «       }d„ |D «       }|ddj                  |«      z   t         z   z  }|dz  }|j                  |«       y)rƒ  s   BABYL OPTIONS:s
   Version: 5c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr4   )rˆ   )r×  r)  s     r"   rØ  z*Babyl._pre_mailbox_hook.<locals>.<genexpr>]  s   è ø€ Ò5 U�%—,‘,—.Ñ5ùs   ‚s   Labels:r%  r&  N)r¢   r  rÈ   r£   )r   r   Úbabylr"  s       r"   rq  zBabyl._pre_mailbox_hookX  sc   € à!¤GÑ+ˆØ�¤Ñ(Ñ(ˆØ—‘Ó"ˆÙ5¨fÔ5ˆØ�˜dŸi™i¨Ó/Ñ/´'Ñ9Ñ9ˆØ�ÑˆØ	�‰��r$   c                 ó4   — |j                  dt        z   «       y)r†  ó   Nr°  r„  s     r"   rs  zBabyl._pre_message_hookb  s   € à	�‰�œ'Ñ!Õ"r$   c                 ó4   — |j                  t        dz   «       y)r‰  r&  Nr°  r„  s     r"   ru  zBabyl._post_message_hookf  s   € à	�‰”˜'Ñ!Õ"r$   c                 ó  — | j                   j                  «       }t        |t        «      �r	g }g }|j	                  «       D ]3  }|| j
                  v r|j                  |«       Œ#|j                  |«       Œ5 | j                   j                  d«       |D ].  }| j                   j                  d|j                  «       z   «       Œ0 | j                   j                  d«       |D ]1  }| j                   j                  d|j                  «       z   dz   «       Œ3 | j                   j                  t        «       n"| j                   j                  dt        z   «       t        |t        j                  j                  «      �rt        j                  «       }t        j                  j!                  |dd«      }|j#                  |«       |j%                  d«       	 |j'                  «       }| j                   j                  |j)                  d
t        «      «       |d
k(  s|snŒH| j                   j                  dt        z   «       t        |t        «      r�t        j                  «       }	t        j                  j!                  |	dd«      }
|
j#                  |j+                  «       «       	 |	j'                  «       }| j                   j                  |j)                  d
t        «      «       |d
k(  s|sn[ŒH|j%                  d«       	 |j'                  «       }| j                   j                  |j)                  d
t        «      «       |d
k(  s|snŒH	 |j-                  d«      }|s�n’| j                   j                  |j)                  d
t        «      «       ŒEt        |t.        t0        t        j2                  f«      �r–t        |t        j2                  «      r+t5        j6                  dt8        d«       |j;                  «       }t        |t0        «      r| j=                  |«      }|j?                  d«      dz   }|dz
  dk7  rº| j                   j                  |d| j)                  d
t        «      «       | j                   j                  dt        z   «       | j                   j                  |d| j)                  d
t        «      «       | j                   j                  ||d j)                  d
t        «      «       �n | j                   j                  dt        z   t        z   «       | j                   j                  |j)                  d
t        «      «       �n¦tA        |d«      �r‚tA        |d«      r't5        j6                  dt8        d«       |jB                  }|j                  «       }d	}	 |j'                  «       }|jE                  d«      r	|dd d
z   }n|jE                  d«      r|dd d
z   }| j                   j                  |j)                  d
t        «      «       |d
k(  s|s9|r6d}| j                   j                  dt        z   «       |j%                  |«       nnŒ³	 |j'                  «       }|snŒ|jE                  d«      r|dd t        z   }n;|jE                  d«      r|dd t        z   }n|jE                  d
«      r|dd t        z   }| j                   j                  |«       ŒˆtG        dtI        |«      z  «      ‚| j                   j                  «       }||fS )z0Write message contents and return (start, stop).ó   1s   , s   ,,ó    r%  s   1,,Fr   Tr�   r  rl  rŽ   r�   s   

rH  r–   Nr­   r‘   r’   r“   r”   r•   r™   )%rY  ro  rš   r   r  r!  r  r£   rˆ   r¢   rL   r+   r
   r›   rœ   r�   rž   rŸ   r    r­   r¡   Úget_visibler�   r§   r¦   r¨   r©   rª   r«   r¬   r‹   r£  rv   r‘   r¥   r¯   r°   )r   r+   r~  Úspecial_labelsr"  r)  Úorig_bufferÚorig_generatorr¶   Ú
vis_bufferÚvis_generatorr‘   Ú
body_startÚoriginal_posÚ
first_passr  s                   r"   rŽ  zBabyl._install_messagej  s®  € à—
‘
—‘Ó!ˆÜ�gœ|Õ,ØˆNØˆFØ ×+Ñ+Ó-ò )�Ø˜D×0Ñ0Ñ0Ø"×)Ñ)¨%Õ0à—M‘M %Õ(ð	)ð
 �J‰J×Ñ˜TÔ"Ø'ò 9�Ø—
‘
× Ñ  ¨¯©«Ñ!7Õ8ð9à�J‰J×Ñ˜UÔ#Øò ?�Ø—
‘
× Ñ  ¨¯©«Ñ!6¸Ñ!=Õ>ð?à�J‰J×ÑœWÕ%à�J‰J×Ñ˜V¤gÑ-Ô.Ü�gœuŸ}™}×4Ñ4Õ5ÜŸ*™*›,ˆKÜ"Ÿ_™_×;Ñ;¸KÈÐPQÓRˆNØ×"Ñ" 7Ô+Ø×Ñ˜QÔØØ"×+Ñ+Ó-�Ø—
‘
× Ñ  §¡¨e´WÓ!=Ô>Ø˜5’=©Øð	 ð
 �J‰J×Ñ˜_¬wÑ6Ô7Ü˜'¤<Ô0ÜŸZ™Z›\�
Ü %§¡× >Ñ >¸zÈ5ÐRSÓ T�Ø×%Ñ% g×&9Ñ&9Ó&;Ô<ØØ%×.Ñ.Ó0�DØ—J‘J×$Ñ$ T§\¡\°%¼Ó%AÔBØ˜u’}©DØð	 ð × Ñ  Ô#ØØ&×/Ñ/Ó1�DØ—J‘J×$Ñ$ T§\¡\°%¼Ó%AÔBØ˜u’}©DØð	 ð
 Ø$×)Ñ)¨$Ó/�ÙÙØ—
‘
× Ñ  §¡°´wÓ!?Ô@ð	 ô
 ˜¤%¬¬b¯k©kÐ!:Õ;Ü˜'¤2§;¡;Ô/Ü—‘ð *Ü+=¸qôBà!×*Ñ*Ó,�Ü˜'¤3Ô'Ø×/Ñ/°Ó8�Ø Ÿ™ gÓ.°Ñ2ˆJØ˜A‰~ Ò#Ø—
‘
× Ñ  ¨¨*Ð!5×!=Ñ!=¸eÄWÓ!MÔNØ—
‘
× Ñ  ´7Ñ!:Ô;Ø—
‘
× Ñ  ¨¨*Ð!5×!=Ñ!=¸eÄWÓ!MÔNØ—
‘
× Ñ  ¨¨Ð!5×!=Ñ!=¸eÄWÓ!MÖNà—
‘
× Ñ  ´7Ñ!:¼WÑ!DÔEØ—
‘
× Ñ  §¡°¼Ó!@ÖAÜ�W˜jÕ)Ü�w Ô)Ü—‘ð 5Ü6HÈ!ôMà!Ÿ.™.�Ø"Ÿ<™<›>ˆLØˆJØØ×'Ñ'Ó)�à—=‘= Ô)Ø  ˜9 uÑ,‘DØ—]‘] 5Ô)Ø  ˜9 uÑ,�DØ—
‘
× Ñ  §¡¨e´WÓ!=Ô>Ø˜5’=©Ù!Ø%*˜
ØŸ
™
×(Ñ(¨¼7Ñ)BÔCØŸ™ \Õ2àð ð Ø×'Ñ'Ó)�ÙØà—=‘= Ô)Ø  ˜9¤wÑ.‘DØ—]‘] 5Ô)Ø  ˜9¤wÑ.‘DØ—]‘] 5Ô)Ø  ˜9¤wÑ.�DØ—
‘
× Ñ  Ô&ð ô Ð6¼¸g»ÑFÓGÐGØ�z‰z�‰Ó ˆØ�tˆ}Ðr$   r¸   )rº   r»   r¼   r½   Ú	frozensetr!  r#   r,   r2   r=   rC   rN   rF   r  rŒ  rq  rs  ru  rŽ  rÀ   r$   r"   r   r   Ý  sY   „ Ù'áò !Bó C€Oóò
ò"ò5òò8ò,Gòò.ò<ò#ò#óir$   r   c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)r
   z0Message with mailbox-format-specific properties.Nc                 ó  — t        |t        j                  j                  «      rG| j	                  t        j                  |«      «       t        |t        «      r|j                  | «       yyt        |t        «      r%| j	                  t        j                  |«      «       yt        |t        «      r%| j	                  t        j                  |«      «       yt        |t        j                  «      r%| j	                  t        j                  |«      «       yt        |d«      r%| j	                  t        j                   |«      «       y|€*t        j                  j                  j#                  | «       yt%        dt'        |«      z  «      ‚)zInitialize a Message instance.r�   Nr™   )rš   rL   r+   r
   Ú_become_messageÚcopyÚdeepcopyÚ_explain_tor§   rM   r¦   Úmessage_from_stringr›   ÚTextIOWrapperÚmessage_from_filerv   Úmessage_from_binary_filer#   r¯   r°   r*   s     r"   r#   zMessage.__init__Ù  s  € ä�gœuŸ}™}×4Ñ4Ô5Ø× Ñ ¤§¡¨wÓ!7Ô8Ü˜'¤7Ô+Ø×#Ñ# DÕ)ð ,ä˜¤Ô'Ø× Ñ ¤×!9Ñ!9¸'Ó!BÕCÜ˜¤Ô%Ø× Ñ ¤×!:Ñ!:¸7Ó!CÕDÜ˜¤×!1Ñ!1Ô2Ø× Ñ ¤×!8Ñ!8¸Ó!AÕBÜ�W˜fÔ%Ø× Ñ ¤×!?Ñ!?ÀÓ!HÕIØˆ_Ü�M‰M×!Ñ!×*Ñ*¨4Õ0äÐ6¼¸g»ÑFÓGÐGr$   c                 ó‚   — t        |dg «      }|j                  D ]#  }||vsŒ|j                  |   | j                  |<   Œ% y)z0Assume the non-format-specific state of message.Ú_type_specific_attributesN)ÚgetattrÚ__dict__)r   r+   Útype_specificrÕ   s       r"   r?  zMessage._become_messageì  sG   € ä Ð)DÀbÓIˆØ×$Ñ$ò 	=ˆDØ˜=Ò(Ø&-×&6Ñ&6°tÑ&<�—‘˜dÒ#ñ	=r$   c                 ó:   — t        |t        «      ryt        d«      ‚)z:Copy format-specific state to message insofar as possible.Nz Cannot convert to specified type)rš   r
   r¯   r*   s     r"   rB  zMessage._explain_toó  s   € ä�gœwÔ'ØäÐ>Ó?Ð?r$   r4   )rº   r»   r¼   r½   r#   r?  rB  rÀ   r$   r"   r
   r
   Ö  s   „ Ù:óHò&=ó@r$   r
   c                   ób   — e Zd ZdZg d¢Zdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)r   z)Message with Maildir-specific properties.)Ú_subdirÚ_infoÚ_dateNc                 ó~   — d| _         d| _        t        j                  «       | _        t        j                  | |«       y)z%Initialize a MaildirMessage instance.rÅ   rÒ   N)rN  rO  r7  rP  r
   r#   r*   s     r"   r#   zMaildirMessage.__init__   s-   € àˆŒØˆŒ
Ü—Y‘Y“[ˆŒ
Ü×Ñ˜˜wÕ'r$   c                 ó   — | j                   S )zReturn 'new' or 'cur'.)rN  rV   s    r"   r×   zMaildirMessage.get_subdir  s   € à�|‰|Ðr$   c                 óB   — |dk(  s|dk(  r|| _         yt        d|z  «      ‚)zSet subdir to 'new' or 'cur'.rÅ   rÆ   z!subdir must be 'new' or 'cur': %sN)rN  rŠ   )r   rç   s     r"   rû   zMaildirMessage.set_subdir  s'   € à�UŠ?˜f¨šoØ!ˆD�LäÐ@À6ÑIÓJÐJr$   c                 óX   — | j                   j                  d«      r| j                   dd S y)ú*Return as a string the flags that are set.ú2,rH  NrÒ   )rO  r®   rV   s    r"   Ú	get_flagszMaildirMessage.get_flags  s'   € à�:‰:× Ñ  Ô&Ø—:‘:˜a˜b�>Ð!àr$   c                 óH   — ddj                  t        |«      «      z   | _        y)ú)Set the given flags and unset all others.rV  rÒ   N)rÈ   rr  rO  )r   Úflagss     r"   Ú	set_flagszMaildirMessage.set_flags  s   € à˜BŸG™G¤F¨5£MÓ2Ñ2ˆ�
r$   c                 óŠ   — | j                  dj                  t        | j                  «       «      t        |«      z  «      «       y©z.Set the given flag(s) without changing others.rÒ   N©r[  rÈ   rî  rW  ©r   Úflags     r"   Úadd_flagzMaildirMessage.add_flag  ó,   € à�‰�r—w‘wœs 4§>¡>Ó#3Ó4´s¸4³yÑ@ÓAÕBr$   c                 ó¬   — | j                  «       rD| j                  dj                  t        | j                  «       «      t        |«      z
  «      «       yy)ú7Unset the given string flag(s) without changing others.rÒ   N)rW  r[  rÈ   rî  r_  s     r"   Úremove_flagzMaildirMessage.remove_flag!  s;   € à�>‰>ÔØ�N‰N˜2Ÿ7™7¤3 t§~¡~Ó'7Ó#8¼3¸t»9Ñ#DÓEÕFð r$   c                 ó   — | j                   S )z<Return delivery date of message, in seconds since the epoch.)rP  rV   s    r"   rÞ   zMaildirMessage.get_date&  ó   € à�z‰zÐr$   c                 ó^   — 	 t        |«      | _        y# t        $ r t        d|z  «      d‚w xY w)z9Set delivery date of message, in seconds since the epoch.zcan't convert to float: %sN)ÚfloatrP  rŠ   r¯   )r   Údates     r"   rý   zMaildirMessage.set_date*  s7   € ð	KÜ˜t›ˆD�JøÜò 	KÜÐ8¸4Ñ?Ó@ÀdÐJð	Kús   ‚ “,c                 ó   — | j                   S )z%Get the message's "info" as a string.)rO  rV   s    r"   rÙ   zMaildirMessage.get_info1  rg  r$   c                 ó`   — t        |t        «      r|| _        yt        dt	        |«      z  «      ‚)z Set the message's "info" string.zinfo must be a string: %sN)rš   r¦   rO  r¯   r°   )r   r�  s     r"   rü   zMaildirMessage.set_info5  s(   € ä�dœCÔ ØˆD�JäÐ7¼$¸t»*ÑDÓEÐEr$   c                 óª  — t        |t        «      r^|j                  | j                  «       «       |j	                  | j                  «       «       |j                  | j                  «       «       yt        |t        «      rÅt        | j                  «       «      }d|v r|j                  d«       | j                  «       dk(  r|j                  d«       d|v r|j                  d«       d|v r|j                  d«       d|v r|j                  d«       |j                  d	t        j                  | j                  «       «      «       yt        |t        «      rZt        | j                  «       «      }d|vr|j                  d
«       d|v r|j                  d«       d|v r|j                  d«       yyt        |t         «      rot        | j                  «       «      }d|vr|j#                  d
«       d|v r|j#                  d«       d|v r|j#                  d«       d|v r|j#                  d«       yyt        |t$        «      ryt'        dt)        |«      z  «      ‚)z;Copy Maildir-specific state to message insofar as possible.ÚSÚRrÆ   ÚOÚTÚDÚFÚAúMAILER-DAEMONr
  ÚrepliedÚflaggedr  r  r<  r  ú$Cannot convert to specified type: %sN)rš   r   r[  rW  rû   r×   rý   rÞ   r¤  rî  ra  r˜  r7  r¨  r   rÏ  r   Ú	add_labelr
   r¯   r°   )r   r+   rZ  s      r"   rB  zMaildirMessage._explain_to<  sô  € ä�gœ~Ô.Ø×Ñ˜dŸn™nÓ.Ô/Ø×Ñ˜tŸ™Ó0Ô1Ø×Ñ˜TŸ]™]›_Õ-Ü˜Ô!1Ô2Ü˜Ÿ™Ó(Ó)ˆEØ�e‰|Ø× Ñ  Ô%Ø�‰Ó  EÒ)Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø×Ñ˜_¬d¯k©k¸$¿-¹-»/Ó.JÕKÜ˜¤Ô+Ü˜Ÿ™Ó(Ó)ˆEØ˜%ÑØ×$Ñ$ XÔ.Ø�e‰|Ø×$Ñ$ YÔ/Ø�e‰|Ø×$Ñ$ YÕ/ð ä˜¤Ô.Ü˜Ÿ™Ó(Ó)ˆEØ˜%ÑØ×!Ñ! (Ô+Ø�e‰|Ø×!Ñ! )Ô,Ø�e‰|Ø×!Ñ! *Ô-Ø�e‰|Ø×!Ñ! +Õ.ð ä˜¤Ô)ØäÐBÜ  ›Mñ*ó +ð +r$   r4   )rº   r»   r¼   r½   rH  r#   r×   rû   rW  r[  ra  re  rÞ   rý   rÙ   rü   rB  rÀ   r$   r"   r   r   û  sL   „ Ù3â =Ðó(òòKòò3òCòGò
òKòòFó)+r$   r   c                   óJ   — e Zd ZdZdgZdd„Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zy)r¤  z/Message with mbox- or MMDF-specific properties.Ú_fromNc                 ó
  — | j                  dd«       t        |t        j                  j                  «      r7|j                  «       }|�%|j                  d«      r| j                  |dd «       t        j                  | |«       y)z'Initialize an mboxMMDFMessage instance.ru  TNzFrom r˜   )r˜  rš   rL   r+   r
   r¦  r®   r#   )r   r+   r�  s      r"   r#   z_mboxMMDFMessage.__init__m  sg   € à�‰�o tÔ,Ü�gœuŸ}™}×4Ñ4Ô5Ø×+Ñ+Ó-ˆHØÐ#¨×(;Ñ(;¸GÔ(DØ—‘˜h q r˜lÔ+Ü×Ñ˜˜wÕ'r$   c                 ó   — | j                   S )z Return contents of "From " line.)r{  rV   s    r"   r¥  z_mboxMMDFMessage.get_fromv  rg  r$   c                 ó|   — |�3|du rt        j                  «       }|dt        j                  |«      z   z  }|| _        y)z>Set "From " line, formatting and appending time_ if specified.NTrö  )r7  r¨  r§  r{  )r   rž  Útime_s      r"   r˜  z_mboxMMDFMessage.set_fromz  s9   € àÐØ˜‰}ÜŸ™›�Ø�Sœ4Ÿ<™<¨Ó.Ñ.Ñ.ˆEØˆ�
r$   c                 óL   — | j                  dd«      | j                  dd«      z   S )rU  ÚStatusrÒ   úX-Status)rA   rV   s    r"   rW  z_mboxMMDFMessage.get_flags‚  s#   € à�x‰x˜ "Ó%¨¯©°¸RÓ(@Ñ@Ð@r$   c                 ó¶  — t        |«      }d\  }}dD ]  }||v sŒ||z  }|j                  |«       Œ dD ]  }||v sŒ||z  }|j                  |«       Œ |dj                  t        |«      «      z  }	 | j	                  d|«       	 | j	                  d|«       y# t
        $ r | j                  d|«       Y Œ1w xY w# t
        $ r | j                  d|«       Y yw xY w)rY  )rÒ   rÒ   )ro  rp  )rr  rs  rt  rÒ   r�  r‚  N)rî  r2   rÈ   rr  Úreplace_headerr8   Ú
add_header)r   rZ  Ústatus_flagsÚxstatus_flagsr`  s        r"   r[  z_mboxMMDFMessage.set_flags†  sï   € ä�E“
ˆØ&,Ñ#ˆ�mØò 	#ˆDØ�uŠ}Ø Ñ$�Ø—‘˜TÕ"ð	#ð $ò 	#ˆDØ�uŠ}Ø Ñ%�Ø—‘˜TÕ"ð	#ð 	˜Ÿ™¤¨£Ó/Ñ/ˆð	4Ø×Ñ ¨,Ô7ð	7Ø×Ñ 
¨MÕ:øô ò 	4Ø�O‰O˜H lÖ3ð	4ûô ò 	7Ø�O‰O˜J¨Ö6ð	7ús$   Á3B ÂB: ÂB7Â6B7Â:CÃCc                 óŠ   — | j                  dj                  t        | j                  «       «      t        |«      z  «      «       yr]  r^  r_  s     r"   ra  z_mboxMMDFMessage.add_flagœ  rb  r$   c                 óœ   — d| v sd| v rD| j                  dj                  t        | j                  «       «      t        |«      z
  «      «       yy)rd  r�  r‚  rÒ   Nr^  r_  s     r"   re  z_mboxMMDFMessage.remove_flag   s@   € à�tÑ˜z¨TÑ1Ø�N‰N˜2Ÿ7™7¤3 t§~¡~Ó'7Ó#8¼3¸t»9Ñ#DÓEÕFð  2r$   c                 óÚ  — t        |t        «      ròt        | j                  «       «      }d|v r|j	                  d«       d|v r|j                  d«       d|v r|j                  d«       d|v r|j                  d«       d|v r|j                  d«       |d	= |d
= dj                  | j                  «       j                  «       dd «      }	 |j                  t        j                  t        j                  |d«      «      «       yt        |t         «      r?|j#                  | j                  «       «       |j%                  | j                  «       «       yt        |t&        «      r_t        | j                  «       «      }d|vr|j)                  d«       d|v r|j)                  d«       d|v r|j)                  d«       |d	= |d
= yt        |t*        «      r_t        | j                  «       «      }d|vr|j-                  d«       d|v r|j-                  d«       d|v r|j-                  d«       |d	= |d
= yt        |t.        «      ryt1        dt3        |«      z  «      ‚# t        t        f$ r Y yw xY w)zACopy mbox- or MMDF-specific state to message insofar as possible.rp  rÆ   rs  rt  ro  rn  rr  rq  Ústatuszx-statusrö  éûÿÿÿNz%a %b %d %H:%M:%S %Yr
  rv  rw  r  r  rx  )rš   r   rî  rW  rû   ra  rÈ   r¥  rÛ   rý   ÚcalendarÚtimegmr7  ÚstrptimerŠ   ÚOverflowErrorr¤  r[  r˜  r   rÏ  r   ry  r
   r¯   r°   )r   r+   rZ  Ú
maybe_dates       r"   rB  z_mboxMMDFMessage._explain_to¥  s9  € ä�gœ~Ô.Ü˜Ÿ™Ó(Ó)ˆEØ�e‰|Ø×"Ñ" 5Ô)Ø�e‰|Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø�e‰|Ø× Ñ  Ô%Ø˜Ð!Ø˜
Ð#ØŸ™ $§-¡-£/×"7Ñ"7Ó"9¸"¸#Ð">Ó?ˆJðØ× Ñ ¤§¡´·±¸zØ6Ló2Nó "Oõ Pô ˜Ô!1Ô2Ø×Ñ˜dŸn™nÓ.Ô/Ø×Ñ˜TŸ]™]›_Õ-Ü˜¤Ô+Ü˜Ÿ™Ó(Ó)ˆEØ˜%ÑØ×$Ñ$ XÔ.Ø�e‰|Ø×$Ñ$ YÔ/Ø�e‰|Ø×$Ñ$ YÔ/Ø˜Ð!Ø˜
Ñ#Ü˜¤Ô.Ü˜Ÿ™Ó(Ó)ˆEØ˜%ÑØ×!Ñ! (Ô+Ø�e‰|Ø×!Ñ! )Ô,Ø�e‰|Ø×!Ñ! *Ô-Ø˜Ð!Ø˜
Ñ#Ü˜¤Ô)ØäÐBÜ  ›Mñ*ó +ð +øô9 ¤Ð.ò Ùðús   Ã
8I ÉI*É)I*r4   )rº   r»   r¼   r½   rH  r#   r¥  r˜  rW  r[  ra  re  rB  rÀ   r$   r"   r¤  r¤  h  s8   „ Ù9à!( 	Ðó(òóòAò7ò,CòGó
1+r$   r¤  c                   ó   — e Zd ZdZy)r   z&Message with mbox-specific properties.N©rº   r»   r¼   r½   rÀ   r$   r"   r   r   Ù  ó   „ Ú0r$   r   c                   ó<   — e Zd ZdZdgZd
d„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
y)r   z$Message with MH-specific properties.Ú
_sequencesNc                 ó>   — g | _         t        j                  | |«       y)z!Initialize an MHMessage instance.N)r–  r
   r#   r*   s     r"   r#   zMHMessage.__init__â  s   € àˆŒÜ×Ñ˜˜wÕ'r$   c                 ó    — | j                   dd S )z4Return a list of sequences that include the message.N)r–  rV   s    r"   rÎ  zMHMessage.get_sequencesç  s   € à�‰™qÐ!Ð!r$   c                 ó$   — t        |«      | _        y)z3Set the list of sequences that include the message.N)rY   r–  )r   rø  s     r"   rû  zMHMessage.set_sequencesë  s   € ä˜y›/ˆ�r$   c                 ó¦   — t        |t        «      r+|| j                  vr| j                  j                  |«       yyt	        dt        |«      z  «      ‚)z8Add sequence to list of sequences including the message.zsequence type must be str: %sN)rš   r¦   r–  r  r¯   r°   ©r   r  s     r"   rÏ  zMHMessage.add_sequenceï  sF   € ä�h¤Ô$Ø˜tŸ™Ñ.Ø—‘×&Ñ& xÕ0ð /ô Ð;¼dÀ8»nÑLÓMÐMr$   c                 óZ   — 	 | j                   j                  |«       y# t        $ r Y yw xY w)zARemove sequence from the list of sequences including the message.N)r–  r2   rŠ   r›  s     r"   Úremove_sequencezMHMessage.remove_sequence÷  s+   € ð	Ø�O‰O×"Ñ" 8Õ,øÜò 	Ùð	úó   ‚ ž	*©*c                 ó|  — t        |t        «      r}t        | j                  «       «      }d|v r|j	                  d«       n"|j	                  d«       |j                  d«       d|v r|j                  d«       d|v r|j                  d«       yyt        |t        «      rlt        | j                  «       «      }d|vr|j                  d«       n|j                  d	«       d|v r|j                  d«       d|v r|j                  d
«       yyt        |t        «      r'| j                  «       D ]  }|j                  |«       Œ yt        |t        «      rEt        | j                  «       «      }d|v r|j                  d«       d|v r|j                  d«       yyt        |t        «      ryt        dt        |«      z  «      ‚)z6Copy MH-specific state to message insofar as possible.r
  rÆ   rn  rw  rs  rv  ro  ÚROrp  rt  r  rx  N)rš   r   rî  rÎ  rû   ra  r¤  r   rÏ  r   ry  r
   r¯   r°   )r   r+   rø  r  s       r"   rB  zMHMessage._explain_toþ  sœ  € ä�gœ~Ô.Ü˜D×.Ñ.Ó0Ó1ˆIØ˜9Ñ$Ø×"Ñ" 5Õ)à×"Ñ" 5Ô)Ø× Ñ  Ô%Ø˜IÑ%Ø× Ñ  Ô%Ø˜IÑ%Ø× Ñ  Õ%ð &ä˜Ô!1Ô2Ü˜D×.Ñ.Ó0Ó1ˆIØ˜yÑ(Ø× Ñ  Õ&à× Ñ  Ô%Ø˜IÑ%Ø× Ñ  Ô%Ø˜IÑ%Ø× Ñ  Õ%ð &ä˜¤Ô+Ø ×.Ñ.Ó0ò /�Ø×$Ñ$ XÕ.ñ/ä˜¤Ô.Ü˜D×.Ñ.Ó0Ó1ˆIØ˜9Ñ$Ø×!Ñ! (Ô+Ø˜IÑ%Ø×!Ñ! *Õ-ð &ä˜¤Ô)ØäÐBÜ  ›Mñ*ó +ð +r$   r4   )rº   r»   r¼   r½   rH  r#   rÎ  rû  rÏ  r�  rB  rÀ   r$   r"   r   r   Ý  s,   „ Ù.à!- Ðó(ò
"ò*òNòó$+r$   r   c                   óP   — e Zd ZdZddgZdd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zy)r   z'Message with Babyl-specific properties.r  Ú_visibleNc                 ó\   — g | _         t        «       | _        t        j                  | |«       y)z#Initialize a BabylMessage instance.N)r  r
   r¢  r#   r*   s     r"   r#   zBabylMessage.__init__*  s"   € àˆŒÜ›	ˆŒÜ×Ñ˜˜wÕ'r$   c                 ó    — | j                   dd S )z'Return a list of labels on the message.N)r  rV   s    r"   r  zBabylMessage.get_labels0  s   € à�|‰|™AˆÐr$   c                 ó$   — t        |«      | _        y)z&Set the list of labels on the message.N)rY   r  )r   r"  s     r"   r  zBabylMessage.set_labels4  s   € ä˜F“|ˆ�r$   c                 ó¦   — t        |t        «      r+|| j                  vr| j                  j                  |«       yyt	        dt        |«      z  «      ‚)z+Add label to list of labels on the message.zlabel must be a string: %sN)rš   r¦   r  r  r¯   r°   ©r   r)  s     r"   ry  zBabylMessage.add_label8  sF   € ä�eœSÔ!Ø˜DŸL™LÑ(Ø—‘×#Ñ# EÕ*ð )ô Ð8¼4À»;ÑFÓGÐGr$   c                 óZ   — 	 | j                   j                  |«       y# t        $ r Y yw xY w)z4Remove label from the list of labels on the message.N)r  r2   rŠ   r§  s     r"   Úremove_labelzBabylMessage.remove_label@  s+   € ð	Ø�L‰L×Ñ Õ&øÜò 	Ùð	úrž  c                 ó,   — t        | j                  «      S )z3Return a Message representation of visible headers.©r
   r¢  rV   s    r"   r3  zBabylMessage.get_visibleG  s   € ä�t—}‘}Ó%Ð%r$   c                 ó$   — t        |«      | _        y)z2Set the Message representation of visible headers.Nr«  )r   Úvisibles     r"   r  zBabylMessage.set_visibleK  s   € ä Ó(ˆ�r$   c                 óþ   — | j                   j                  «       D ]3  }|| v r | j                   j                  || |   «       Œ'| j                   |= Œ5 dD ](  }|| v sŒ|| j                   vsŒ| |   | j                   |<   Œ* y)z9Update and/or sensibly generate a set of visible headers.)ÚDateÚFromzReply-ToÚToÚCCÚSubjectN)r¢  rZ   r„  )r   Úheaders     r"   Úupdate_visiblezBabylMessage.update_visibleO  s   € à—m‘m×(Ñ(Ó*ò 	*ˆFØ˜‰~Ø—‘×,Ñ,¨V°T¸&±\ÕBà—M‘M &Ñ)ð		*ð
 Jò 	5ˆFØ˜Š~ &°·±Ò"=Ø(,¨V©�—‘˜fÒ%ñ	5r$   c                 óì  — t        |t        «      r–t        | j                  «       «      }d|v r|j	                  d«       n"|j	                  d«       |j                  d«       d|v sd|v r|j                  d«       d|v r|j                  d«       d	|v r|j                  d
«       yyt        |t        «      rlt        | j                  «       «      }d|vr|j                  d«       n|j                  d«       d	|v r|j                  d«       d|v r|j                  d«       yyt        |t        «      rEt        | j                  «       «      }d|v r|j                  d«       d|v r|j                  d«       yyt        |t        «      rF|j                  | j                  «       «       | j                  «       D ]  }|j                  |«       Œ yt        |t        «      ryt        dt        |«      z  «      ‚)z9Copy Babyl-specific state to message insofar as possible.r
  rÆ   rn  r  r	  r<  r  ro  r  rq  r   rp  rr  rt  rv  rx  N)rš   r   rî  r  rû   ra  r¤  r   rÏ  r   r  r3  ry  r
   r¯   r°   )r   r+   r"  r)  s       r"   rB  zBabylMessage._explain_toZ  sÈ  € ä�gœ~Ô.Ü˜Ÿ™Ó*Ó+ˆFØ˜6Ñ!Ø×"Ñ" 5Õ)à×"Ñ" 5Ô)Ø× Ñ  Ô%Ø˜fÑ$¨°FÑ(:Ø× Ñ  Ô%Ø˜VÑ#Ø× Ñ  Ô%Ø˜FÑ"Ø× Ñ  Õ%ð #ä˜Ô!1Ô2Ü˜Ÿ™Ó*Ó+ˆFØ˜vÑ%Ø× Ñ  Õ&à× Ñ  Ô%Ø˜FÑ"Ø× Ñ  Ô%Ø˜VÑ#Ø× Ñ  Õ%ð $ä˜¤Ô+Ü˜Ÿ™Ó*Ó+ˆFØ˜6Ñ!Ø×$Ñ$ XÔ.Ø˜VÑ#Ø×$Ñ$ YÕ/ð $ä˜¤Ô.Ø×Ñ × 0Ñ 0Ó 2Ô3ØŸ™Ó*ò )�Ø×!Ñ! %Õ(ñ)ä˜¤Ô)ØäÐBÜ  ›Mñ*ó +ð +r$   r4   )rº   r»   r¼   r½   rH  r#   r  r  ry  r©  r3  r  rµ  rB  rÀ   r$   r"   r   r   %  s>   „ Ù1à!*¨JÐ 7Ðó(òò$òHòò&ò)ò	5ó'+r$   r   c                   ó   — e Zd ZdZy)r   z&Message with MMDF-specific properties.Nr“  rÀ   r$   r"   r   r   „  r”  r$   r   c                   óœ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zd„ Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Z ee«      Zy)r  zA read-only wrapper of a file.Nc                 óP   — || _         |€|j                  «       | _        y|| _        y)zInitialize a _ProxyFile.N)rY  ro  Ú_pos)r   r   Úposs      r"   r#   z_ProxyFile.__init__‹  s"   € àˆŒ
Øˆ;ØŸ™›ˆD�IàˆD�Ir$   c                 óN   — | j                  || j                  j                  «      S ©zRead bytes.)Ú_readrY  r�   ©r   Úsizes     r"   r�   z_ProxyFile.read“  s   € à�z‰z˜$ §
¡
§¡Ó0Ð0r$   c                 óN   — | j                  || j                  j                  «      S r½  )r¾  rY  Úread1r¿  s     r"   rÂ  z_ProxyFile.read1—  s   € à�z‰z˜$ §
¡
× 0Ñ 0Ó1Ð1r$   c                 óN   — | j                  || j                  j                  «      S )zRead a line.)r¾  rY  r­   r¿  s     r"   r­   z_ProxyFile.readline›  s   € à�z‰z˜$ §
¡
× 3Ñ 3Ó4Ð4r$   c                 ól   — g }| D ],  }|j                  |«       |€Œ|t        |«      z  }|dk  sŒ+ |S  |S )zRead multiple lines.r   )r  r  )r   Úsizehintrq   r¶   s       r"   Ú	readlinesz_ProxyFile.readlinesŸ  sL   € àˆØò 	ˆDØ�M‰M˜$ÔØÑ#ØœC ›IÑ%�Ø˜q“=ØØˆð	ð ˆr$   c              #   ó`   K  — | j                  «       x}r|–— | j                  «       x}rŒyy­w)zIterate over lines.N)r­   )r   r¶   s     r"   ra   z_ProxyFile.__iter__ª  s/   è ø€ à—m‘m“oÐ%ˆdÐ%ØŠJð —m‘m“oÐ%ˆdÓ%ùs   ‚).¬.c                 ó   — | j                   S )zReturn the position.)rº  rV   s    r"   ro  z_ProxyFile.tell¯  s   € à�y‰yÐr$   c                 óÎ   — |dk(  r%| j                   j                  | j                  «       | j                   j                  ||«       | j                   j                  «       | _        y)zChange position.r  N©rY  r    rº  ro  ©r   ÚoffsetÚwhences      r"   r    z_ProxyFile.seek³  sA   € à�QŠ;Ø�J‰J�O‰O˜DŸI™IÔ&Ø�
‰
�‰˜ Ô'Ø—J‘J—O‘OÓ%ˆ�	r$   c                 ó’   — t        | d«      r4	 t        | j                  d«      r| j                  j                  «        | `yy# | `w xY w)zClose the file.rY  r†   N)rv   rY  r†   rV   s    r"   r†   z_ProxyFile.closeº  sB   € ä�4˜Ô!ðÜ˜4Ÿ:™: wÔ/Ø—J‘J×$Ñ$Ô&à‘Jð "øð
 ‘Jús   Ž0A ÁAc                 ó¦   — |€d}| j                   j                  | j                  «        ||«      }| j                   j                  «       | _        |S )z"Read size bytes using read_method.r–   rÊ  )r   rÀ  Úread_methodrq   s       r"   r¾  z_ProxyFile._readÃ  sA   € àˆ<ØˆDØ�
‰
�‰˜Ÿ	™	Ô"Ù˜TÓ"ˆØ—J‘J—O‘OÓ%ˆŒ	Øˆr$   c                 ó   — | S )z$Context management protocol support.rÀ   rV   s    r"   Ú	__enter__z_ProxyFile.__enter__Ì  s   € àˆr$   c                 ó$   — | j                  «        y r4   )r†   )r   Úexcs     r"   Ú__exit__z_ProxyFile.__exit__Ð  s   € Ø�
‰
�r$   c                 ó6   — | j                   j                  «       S r4   )rY  ÚreadablerV   s    r"   r×  z_ProxyFile.readableÓ  ó   € Ø�z‰z×"Ñ"Ó$Ð$r$   c                 ó6   — | j                   j                  «       S r4   )rY  ÚwritablerV   s    r"   rÚ  z_ProxyFile.writableÖ  rØ  r$   c                 ó6   — | j                   j                  «       S r4   )rY  ÚseekablerV   s    r"   rÜ  z_ProxyFile.seekableÙ  rØ  r$   c                 ó6   — | j                   j                  «       S r4   )rY  r}   rV   s    r"   r}   z_ProxyFile.flushÜ  s   € Ø�z‰z×ÑÓ!Ð!r$   c                 óv   — t        | d«      syt        | j                  d«      sy| j                  j                  S )NrY  TrÉ  F)rv   rY  rÉ  rV   s    r"   rÉ  z_ProxyFile.closedß  s0   € ä�t˜WÔ%ØÜ�t—z‘z 8Ô,ØØ�z‰z× Ñ Ð r$   r4   ©r   )rº   r»   r¼   r½   r#   r�   rÂ  r­   rÆ  ra   ro  r    r†   r¾  rÒ  rÕ  r×  rÚ  rÜ  r}   ÚpropertyrÉ  r¾   r   r¿   rÀ   r$   r"   r  r  ˆ  sv   „ Ù(óó1ó2ó5ó	òò
ó&òòòòò%ò%ò%ò"ð ñ!ó ð!ñ $ LÓ1Ñr$   r  c                   ó2   — e Zd ZdZdd„Zd„ Zd	d„Zd„ Zd„ Zy)
r¡  z&A read-only wrapper of part of a file.Nc                 óN   — t         j                  | ||«       || _        || _        y)zInitialize a _PartialFile.N)r  r#   Ú_startÚ_stop)r   r   r~  r  s       r"   r#   z_PartialFile.__init__í  s"   € ä×Ñ˜D ! UÔ+ØˆŒØˆ�
r$   c                 óF   — t         j                  | «      | j                  z
  S )z*Return the position with respect to start.)r  ro  rã  rV   s    r"   ro  z_PartialFile.telló  s   € ä�‰˜tÓ$ t§{¡{Ñ2Ð2r$   c                 ó”   — |dk(  r| j                   | _        d}n|dk(  r| j                  | _        d}t        j	                  | ||«       y)z8Change position, possibly with respect to start or stop.r   r  rH  N)rã  rº  rä  r  r    rË  s      r"   r    z_PartialFile.seek÷  s@   € à�QŠ;ØŸ™ˆDŒIØ‰FØ�qŠ[ØŸ
™
ˆDŒIØˆFÜ�‰˜˜f fÕ-r$   c                 óŠ   — | j                   | j                  z
  }|dk  ry|�
|dk  s||kD  r|}t        j                  | ||«      S )z;Read size bytes using read_method, honoring start and stop.r   r$   )rä  rº  r  r¾  )r   rÀ  rÐ  Ú	remainings       r"   r¾  z_PartialFile._read  sJ   € à—J‘J §¡Ñ*ˆ	Ø˜Š>ØØˆ<˜4 !š8 t¨iÒ'7ØˆDÜ×Ñ  d¨KÓ8Ð8r$   c                 ó"   — t        | d«      r| `y y )NrY  )rv   rY  rV   s    r"   r†   z_PartialFile.close
  s   € ô �4˜Ô!Ø‘
ð "r$   )NNrß  )	rº   r»   r¼   r½   r#   ro  r    r¾  r†   rÀ   r$   r"   r¡  r¡  ê  s   „ Ù0óò3ó.ò9ór$   r¡  c                 ó„  — d}	 t         r6	 t        j                  | t         j                  t         j                  z  «       |r{	 t        | j                  dz   «      }|j                  «        	 	 t        j                  |j                  | j                  dz   «       d}t        j                  |j                  «       yyy# t        $ rY}|j
                  t
        j                  t
        j                  t
        j                  fv rt        d| j                  z  «      ‚‚ d}~ww xY w# t        $ r7}|j
                  t
        j                  t
        j                  fv rY d}~y‚ d}~ww xY w# t         t"        f$ r2 t        j$                  |j                  | j                  dz   «       d}Y Œêw xY w# t&        $ r8 t        j(                  |j                  «       t        d| j                  z  «      ‚w xY w#  t         r$t        j                  | t         j*                  «       |r"t        j(                  | j                  dz   «       ‚ xY w)z(Lock file f using lockf and dot locking.Fzlockf: lock unavailable: %sNú.lockTzdot lock unavailable: %s)ÚfcntlÚlockfÚLOCK_EXÚLOCK_NBrã   rä   ÚEAGAINrW  rX  r   rÕ   rp  r†   r   rß   rý  rà   rá   râ   rE  r2   ÚLOCK_UN)r   rm  Údotlock_donerë   Úpre_locks        r"   rg  rg    sÅ  € à€Lð%ÝðÜ—‘˜AœuŸ}™}¬u¯}©}Ñ<Ô=ñ ðÜ,¨Q¯V©V°gÑ-=Ó>�Ø—‘Ô ð1ð-Ü—G‘G˜HŸM™M¨1¯6©6°GÑ+;Ô<Ø#'�Lô
 —I‘I˜hŸm™mÕ,ð !ð øô ò Ø—7‘7œuŸ|™|¬U¯\©\¼5¿;¹;ÐGÑGÜ,Ð-JØ-.¯V©Vñ.4ó 5ð 5ð ûðûô ò Ø—7‘7œuŸ|™|¬U¯[©[Ð9Ñ9Üàûð	ûô '¬Ð8ò (Ü—I‘I˜hŸm™m¨Q¯V©V°gÑ-=Ô>Ø#'’Lð(ûô
 #ò 1Ü—	‘	˜(Ÿ-™-Ô(Ü(Ð)CØ)*¯©ñ*0ó 1ð 1ð1ûðÝÜ�K‰K˜œ5Ÿ=™=Ô)ÙÜ�I‰I�a—f‘f˜wÑ&Ô'Øús‹   „G. ‹5B> Á G. Á(D# Á-/E& ÂF* Â>	D ÃADÄD Ä G. Ä#	E#Ä,,EÅG. ÅEÅE#Å#G. Å&>F'Æ$F* Æ&F'Æ'F* Æ*AG+Ç+G. Ç.AH?c                 óö   — t         r$t        j                  | t         j                  «       t        j                  j                  | j                  dz   «      r#t        j                  | j                  dz   «       yy)z*Unlock file f using lockf and dot locking.rë  N)rì  rí  rñ  r   r   rÊ   rÕ   r2   ©r   s    r"   rj  rj  ;  sJ   € åÜ�‰�A”u—}‘}Ô%Ü	‡w�w‡~�~�a—f‘f˜wÑ&Ô'Ü
�	‰	�!—&‘&˜7Ñ"Õ#ð (r$   c                 ó  — t        j                  | t         j                  t         j                  z  t         j                  z  d«      }	 t        | d«      t        j
                  |«       S # t        j
                  |«       w xY w)zCCreate a file if it doesn't exist and open for reading and writing.r(  rU  )r   rú   r)  rÄ  ÚO_RDWRr†   )r   Úfds     r"   rD  rD  B  sP   € ä	�‰�”r—z‘z¤B§I¡IÑ-´·	±	Ñ9¸5Ó	A€BðÜ�D˜%Ó ä
�‰��øŒ�‰��ús   Á	A* Á*Bc           
      ó¬   — t        | ›dt        t        j                  «       «      ›dt        j                  «       ›dt        j                  «       ›�«      S )zBCreate a temp file based on path and open for reading and writing.r  )rD  r@  r7  r>  r?  r   rA  )r   s    r"   rp  rp  J  s8   € äªd´C¼¿	¹	»Õ4DÜ.4×.@Ñ.@Õ.BÜ.0¯i©i¬kð;ó <ð <r$   c                 óŒ   — | j                  «        t        t        d«      r$t        j                  | j	                  «       «       yy)z0Ensure changes to file f are physically on disk.ÚfsyncN)r}   rv   r   rû  Úfilenorõ  s    r"   rn  rn  P  s,   € à‡G�G„IÜŒr�7ÔÜ
�‰�—‘“Õð r$   c                 ó:   — t        | «       | j                  «        y)z:Close file f, ensuring all changes are physically on disk.N)rn  r†   rõ  s    r"   rÖ   rÖ   V  s   € ä�„NØ‡G�G…Ir$   c                   ó   — e Zd ZdZy)r   z"Raised for module-specific errors.Nr“  rÀ   r$   r"   r   r   \  s   „ Ú,r$   r   c                   ó   — e Zd ZdZy)r   z:The specified mailbox does not exist and won't be created.Nr“  rÀ   r$   r"   r   r   _  s   „ ÚDr$   r   c                   ó   — e Zd ZdZy)r   z>The specified mailbox is not empty and deletion was requested.Nr“  rÀ   r$   r"   r   r   b  s   „ ÚHr$   r   c                   ó   — e Zd ZdZy)r   z)Another process caused an action to fail.Nr“  rÀ   r$   r"   r   r   e  ó   „ Ú3r$   r   c                   ó   — e Zd ZdZy)r   z)A file appears to have an invalid format.Nr“  rÀ   r$   r"   r   r   h  r  r$   r   )T)2r½   r   r7  r�  r>  rä   r@  r©   rL   Úemail.messageÚemail.generatorr›   rD   Útypesr   rì  ÚImportErrorÚ__all__r¢   rˆ   r   r   rS  r“  r   r	   r   r   r+   r
   r   r¤  r   r   r   r   r  r¡  rg  rj  rD  rp  rn  rÖ   Ú	Exceptionr   r   r   r   r   rÀ   r$   r"   ú<module>r
     sË  ðÙ Jó 
Û Û Û Û Û Û Û Û Û Û 	Û Ý ðÛòA€ð
 �*‰*×
Ñ
˜GÓ
$€÷f2ñ f2ôRsˆgô sôl	C˜ô CôN@Ð"ô @ôF1.ˆ9ô 1.ôh*.ˆ9ô *.ôZn*ˆô n*ôb	vÐô vôr"@ˆe�m‰m×#Ñ#ô "@ôJj+�Wô j+ôZn+�wô n+ôb1Ð"ô 1ôE+�ô E+ôP\+�7ô \+ô~1Ð"ô 1÷_2ñ _2ôD$�:ô $óN(òT$òò<òòô-ˆIô -ôE˜ô EôI�Eô Iô4˜ô 4ô4�%õ 4øðaB ò ØƒEðús   ºE5 Å5F Å?F 