ó
    F\hrY  ã                   óv  • S r SS/rSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  \R                  " S	5      r\R                  " S
5      r\R                  " S5      r\R                  " S
5      r\R                  " S5      rSrSr\R                  " S5      r\" 5       r " S S\5      r " S S5      r " S S\5      rg)a  FeedParser - An email feed parser.

The feed parser implements an interface for incrementally parsing an email
message, line by line.  This has advantages for certain applications, such as
those reading email messages off a socket.

FeedParser.feed() is the primary interface for pushing new data into the
parser.  It returns when there's nothing more it can do with the available
data.  When you have no more data to push into the parser, call .close().
This completes the parsing and returns the root message object.

The other advantage of this parser is that it will never raise a parsing
exception.  Instead, when it finds something unexpected, it adds a 'defect' to
the current message.  Defects are just instances that live on the message
object's .defects attribute.
Ú
FeedParserÚBytesFeedParseré    N)Úerrors)Úcompat32)Údeque)ÚStringIOz
\r\n|\r|\nz(\r\n|\r|\n)z(\r\n|\r|\n)\Zz%^(From |[\041-\071\073-\176]*:|[\t ])Ú Ú
z3(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$c                   óT   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)ÚBufferedSubFileé.   aW  A file-ish object that can have new data loaded into it.

You can also push and pop line-matching predicates onto a stack.  When the
current predicate matches the current line, a false EOF response
(i.e. empty string) is returned instead.  This lets the parser adhere to a
simple abstraction -- it parses until EOF closes the current message.
c                 óZ   • [        SS9U l        [        5       U l        / U l        SU l        g )Nr	   )ÚnewlineF)r   Ú_partialr   Ú_linesÚ	_eofstackÚ_closed©Úselfs    Ú'/usr/lib/python3.13/email/feedparser.pyÚ__init__ÚBufferedSubFile.__init__6   s'   € ô !¨Ñ,ˆŒä“gˆŒàˆŒàˆ�ó    c                 ó:   • U R                   R                  U5        g ©N)r   Úappend)r   Úpreds     r   Úpush_eof_matcherÚ BufferedSubFile.push_eof_matcherA   s   € Ø�‰×Ñ˜dÕ#r   c                 ó6   • U R                   R                  5       $ r   )r   Úpopr   s    r   Úpop_eof_matcherÚBufferedSubFile.pop_eof_matcherD   s   € Ø�~‰~×!Ñ!Ó#Ð#r   c                 ó  • U R                   R                  S5        U R                  U R                   R                  5       5        U R                   R                  S5        U R                   R	                  5         SU l        g )Nr   T)r   ÚseekÚ	pushlinesÚ	readlinesÚtruncater   r   s    r   ÚcloseÚBufferedSubFile.closeG   sV   € à�‰×Ñ˜1ÔØ�‰�t—}‘}×.Ñ.Ó0Ô1Ø�‰×Ñ˜1ÔØ�‰×ÑÔ Øˆ�r   c                 ó  • U R                   (       d  U R                  (       a  g[        $ U R                   R                  5       n[	        U R
                  5       H-  nU" U5      (       d  M  U R                   R                  U5          g   U$ ©Nr	   )r   r   ÚNeedMoreDataÚpopleftÚreversedr   Ú
appendleft)r   ÚlineÚateofs      r   ÚreadlineÚBufferedSubFile.readlineO   sg   € Ø�{�{Ø�|�|ØÜÐð �{‰{×"Ñ"Ó$ˆô ˜dŸn™nÖ-ˆEÙ�T�{‹{à—‘×&Ñ& tÔ,Ùñ	 .ð
 ˆr   c                 óP   • U[         Ld   eU R                  R                  U5        g r   )r-   r   r0   ©r   r1   s     r   Ú
unreadlineÚBufferedSubFile.unreadlinea   s"   € àœ<Ò'Ð'Ð'Ø�‰×Ñ˜tÕ$r   c                 óÎ  • U R                   R                  U5        SU;  a  SU;  a  gU R                   R                  S5        U R                   R                  5       nU R                   R                  S5        U R                   R	                  5         US   R                  S5      (       d)  U R                   R                  UR                  5       5        U R                  U5        g)z$Push some new data into this object.r
   ÚNr   éÿÿÿÿ)r   Úwriter%   r'   r(   Úendswithr!   r&   )r   ÚdataÚpartss      r   ÚpushÚBufferedSubFile.pushf   s©   € à�‰×Ñ˜DÔ!Ø�tÓ ¨DÓ 0àð 	�‰×Ñ˜1ÔØ—‘×'Ñ'Ó)ˆØ�‰×Ñ˜1ÔØ�‰×ÑÔ ð �R‰y×!Ñ! $×'Ñ'Ø�M‰M×Ñ §	¡	£Ô,Ø�‰�uÕr   c                 ó:   • U R                   R                  U5        g r   )r   Úextend)r   Úliness     r   r&   ÚBufferedSubFile.pushlines{   s   € Ø�‰×Ñ˜5Õ!r   c                 ó   • U $ r   © r   s    r   Ú__iter__ÚBufferedSubFile.__iter__~   s   € Øˆr   c                 ó>   • U R                  5       nUS:X  a  [        eU$ r,   )r3   ÚStopIterationr6   s     r   Ú__next__ÚBufferedSubFile.__next__�   s   € Ø�}‰}‹ˆØ�2‹:ÜÐØˆr   )r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r"   r)   r3   r7   r@   r&   rH   rL   Ú__static_attributes__rG   r   r   r   r   .   s9   † ñò	ò$ò$òòò$%ò
ò*"òõr   r   c                   óZ   • \ rS rSrSrS\S.S jjrS rS rS r	S	 r
S
 rS rS rS rSrg)r   éˆ   zA feed-style parser of email.N©Úpolicyc                ól  • X l         SU l        Uc,  UR                  c  SSKJn  X0l        O)UR                  U l        OXl         U" U R                   S9  [        5       U l        / U l	        U R                  5       R                  U l        SU l        SU l        SU l        g! [         a
    SU l         N^f = f)zã_factory is called with no arguments to create a new message obj

The policy keyword specifies a policy object that controls a number of
aspects of the parser's operation.  The default policy maintains
backward compatibility.

FNr   )ÚMessagerV   T)rW   Ú_old_style_factoryÚmessage_factoryÚemail.messagerY   Ú_factoryÚ	TypeErrorr   Ú_inputÚ	_msgstackÚ	_parsegenrL   Ú_parseÚ_curÚ_lastÚ_headersonly)r   r]   rW   rY   s       r   r   ÚFeedParser.__init__‹   s¤   € ð ŒØ"'ˆÔØÑØ×%Ñ%Ñ-Ý1Ø '•à &× 6Ñ 6�•à$ŒMð/Ù §¡Ò,ô &Ó'ˆŒØˆŒØ—n‘nÓ&×/Ñ/ˆŒØˆŒ	ØˆŒ
Ø!ˆÕøô ó /à*.�Ö'ð/ús   ÁB ÂB3Â2B3c                 ó   • SU l         g )NT)re   r   s    r   Ú_set_headersonlyÚFeedParser._set_headersonlyª   s
   € Ø ˆÕr   c                 óZ   • U R                   R                  U5        U R                  5         g)zPush more data into the parser.N)r_   r@   Ú_call_parse)r   r>   s     r   ÚfeedÚFeedParser.feed­   s    € à�‰×Ñ˜ÔØ×ÑÕr   c                 óF   •  U R                  5         g ! [         a     g f = fr   )rb   rK   r   s    r   rk   ÚFeedParser._call_parse²   s"   € ð	Ø�K‰K�MøÜó 	Ùð	ús   ‚ “
 Ÿ c                 ót  • U R                   R                  5         U R                  5         U R                  5       nU R                  (       a   eUR                  5       S:X  aV  UR                  5       (       dA  U R                  (       d0  [        R                  " 5       nU R                  R                  X5        U$ )z<Parse all remaining data and return the root message object.Ú	multipart)r_   r)   rk   Ú_pop_messager`   Úget_content_maintypeÚis_multipartre   r   Ú!MultipartInvariantViolationDefectrW   Úhandle_defect)r   ÚrootÚdefects      r   r)   ÚFeedParser.close¸   s†   € à�‰×ÑÔØ×ÑÔØ× Ñ Ó"ˆØ—>—>Ð!Ð!à×$Ñ$Ó&¨+Ó5Ø×(Ñ(×*Ñ*°4×3D×3DÜ×=Ò=Ó?ˆFØ�K‰K×%Ñ% dÔ3Øˆr   c                 ó¦  • U R                   (       a  U R                  5       nOU R                  U R                  S9nU R                  (       a/  U R                  R	                  5       S:X  a  UR                  S5        U R                  (       a  U R                  S   R                  U5        U R                  R                  U5        Xl        Xl	        g )NrV   zmultipart/digestzmessage/rfc822r;   )
rZ   r]   rW   rc   Úget_content_typeÚset_default_typer`   Úattachr   rd   )r   Úmsgs     r   Ú_new_messageÚFeedParser._new_messageÅ   s�   € Ø×"×"Ø—-‘-“/‰Cà—-‘- t§{¡{�-Ð3ˆCØ�9�9˜Ÿ™×3Ñ3Ó5Ð9KÓKØ× Ñ Ð!1Ô2Ø�>�>Ø�N‰N˜2Ñ×%Ñ% cÔ*Ø�‰×Ñ˜cÔ"ØŒ	Ø�
r   c                 ó–   • U R                   R                  5       nU R                   (       a  U R                   S   U l        U$ S U l        U$ )Nr;   )r`   r!   rc   )r   Úretvals     r   rr   ÚFeedParser._pop_messageÒ   s@   € Ø—‘×#Ñ#Ó%ˆØ�>�>ØŸ™ rÑ*ˆDŒIð ˆð ˆDŒIØˆr   c              #   óø  ^#   • U R                  5         / nU R                   H³  nU[        L a
  [        v •  M  [        R	                  U5      (       dr  [
        R	                  U5      (       dV  [        R                  " 5       nU R                  R                  U R                  U5        U R                  R                  U5          OUR                  U5        Mµ     U R                  U5        U R                  (       ay  / n U R                  R                  5       nU[        L a
  [        v •  M.  US:X  a  OUR                  U5        MG  U R                  R!                  ["        R%                  U5      5        g U R                  R'                  5       S:X  Ga   U R                  R)                  [
        R                  5        U R+                  5        H  nU[        L a
  [        v •  M    O   U R-                  5         U R                  R/                  5          U R                  R                  5       nU[        L a
  [        v •  M.    U R                  R                  5       nU[        L a
  [        v •  M.   US:X  a   g U R                  R                  U5        GM  U R                  R1                  5       S:X  a;  U R+                  5        H  nU[        L a
  [        v •  M    O   U R-                  5         g U R                  R1                  5       S:X  Ga  U R                  R3                  5       nUc£  [        R4                  " 5       nU R                  R                  U R                  U5        / nU R                   H'  nU[        L a
  [        v •  M  UR                  U5        M)     U R                  R!                  ["        R%                  U5      5        g [7        U R                  R9                  SS5      5      R;                  5       S;  a;  [        R<                  " 5       nU R                  R                  U R                  U5        S	U-   mU4S
 jnSn/ n	Sn
Sn U R                  R                  5       nU[        L a
  [        v •  M.  US:X  a  GOÙU" U5      nU(       Ga¬  UR?                  S5      (       a  SnUR?                  S5      n
GOžU(       a�  U	(       af  U	S   n[@        RC                  U5      nU(       a!  US [E        UR?                  S5      5      *  U	S'   ["        R%                  U	5      U R                  l#        SnU R                  R                  U5        GM   U R                  R                  5       nU[        L a
  [        v •  M.  U" U5      nU(       d  U R                  R                  U5        OMZ  U R                  R)                  U5        U R+                  5        H  nU[        L a
  [        v •  M    O   U RH                  R1                  5       S:X  a}  U RH                  RJ                  nUS:X  a  S U RH                  l%        OÅUbK  [@        RC                  U5      nU(       a/  [E        UR?                  S5      5      nUS U*  U RH                  l%        OvU RH                  RL                  n[O        U[6        5      (       aK  [@        RC                  U5      nU(       a/  US [E        UR?                  S5      5      *  nUU RH                  l&        U R                  R/                  5         U R-                  5         U R                  U l$        OU(       d   eU	R                  U5        GM  U(       a¶  [        RP                  " 5       nU R                  R                  U R                  U5        U R                  R!                  ["        R%                  U	5      5        / nU R                   H  nU[        L d  M  [        v •  M     ["        R%                  U5      U R                  l%        g U(       d<  [        RR                  " 5       nU R                  R                  U R                  U5        g U
(       a  S/nO/ nU R                   H'  nU[        L a
  [        v •  M  UR                  U5        M)     U(       aA  US   n[T        R	                  U5      nU(       a   U[E        UR?                  S5      5      S  US'   ["        R%                  U5      U R                  l%        g / nU R                   H'  nU[        L a
  [        v •  M  UR                  U5        M)     U R                  R!                  ["        R%                  U5      5        g 7f)NTr	   zmessage/delivery-statusÚmessagerq   zcontent-transfer-encodingÚ8bit)Ú7bitr†   Úbinaryz--c                 óp   >• U R                  T5      (       d  g [        R                  U [        T5      5      $ r   )Ú
startswithÚboundaryendREÚmatchÚlen)r1   Ú	separators    €r   ÚboundarymatchÚ+FeedParser._parsegen.<locals>.boundarymatchL  s,   ø€ Ø—‘ y×1Ñ1ØÜ$×*Ñ*¨4´°Y³Ó@Ð@r   FÚendÚlinesepr;   r   )+r   r_   r-   ÚheaderRErŒ   ÚNLCREr   Ú MissingHeaderBodySeparatorDefectrW   rv   rc   r7   r   Ú_parse_headersre   r3   Úset_payloadÚEMPTYSTRINGÚjoinr{   r   ra   rr   r"   rs   Úget_boundaryÚNoBoundaryInMultipartDefectÚstrÚgetÚlowerÚ-InvalidMultipartContentTransferEncodingDefectÚgroupÚ	NLCRE_eolÚsearchr�   Úpreamblerd   ÚepilogueÚ_payloadÚ
isinstanceÚStartBoundaryNotFoundDefectÚCloseBoundaryNotFoundDefectÚ	NLCRE_bol)r   Úheadersr1   rx   rD   r‚   Úboundaryr�   Úcapturing_preambler£   r’   Úclose_boundary_seenÚmoÚlastlineÚeolmor¤   r‘   ÚpayloadÚ	firstlineÚbolmorŽ   s                       @r   ra   ÚFeedParser._parsegenÚ   s—  øé € à×ÑÔØˆð —K”KˆDØ”|Ò#Ü"Ò"ÙÜ—>‘> $×'Ñ'ô —{‘{ 4×(Ñ(Ü#×DÒDÓF�FØ—K‘K×-Ñ-¨d¯i©i¸Ô@Ø—K‘K×*Ñ*¨4Ô0ÙØ�N‰N˜4Ö ñ  ð  	×Ñ˜GÔ$ð ××ØˆEØØ—{‘{×+Ñ+Ó-�Øœ<Ò'Ü&Ò&ÙØ˜2“:ØØ—‘˜TÔ"ñ ð �I‰I×!Ñ!¤+×"2Ñ"2°5Ó"9Ô:ØØ�9‰9×%Ñ%Ó'Ð+DÔDð Ø—‘×,Ñ,¬U¯[©[Ô9Ø"Ÿn™nÖ.�FØ¤Ò-Ü*Ò*Ù Ùñ	 /ð
 ×!Ñ!Ô#ð —‘×+Ñ+Ô-ð
 ØŸ;™;×/Ñ/Ó1�DØœ|Ò+Ü*Ò*Ù ØØØŸ;™;×/Ñ/Ó1�DØœ|Ò+Ü*Ò*Ù ØØ˜2“:Øð ð —‘×&Ñ& tÔ,ò? ðB �9‰9×)Ñ)Ó+¨yÓ8ð Ÿ.™.Ö*�Øœ\Ò)Ü&Ò&ÙÙñ	 +ð
 ×ÑÔØØ�9‰9×)Ñ)Ó+¨{Ô:Ø—y‘y×-Ñ-Ó/ˆHØÑô
  ×;Ò;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Ø�Ø ŸKœK�DØœ|Ò+Ü*Ò*Ù Ø—L‘L Ö&ñ	 (ð
 —	‘	×%Ñ%¤k×&6Ñ&6°uÓ&=Ô>Øä�D—I‘I—M‘MÐ"=¸vÓFÓG×MÑMÓOØ5ó6ä×MÒMÓO�Ø—‘×)Ñ)¨$¯)©)°VÔ<ð
 ˜x™ˆIõAð "&ÐØˆHØˆGØ"'ÐØØ—{‘{×+Ñ+Ó-�Øœ<Ò'Ü&Ò&ÙØ˜2“:ÙÙ" 4Ó(�ßð
 —x‘x —‘Ø.2Ð+Ø"$§(¡(¨9Ó"5˜Ùæ)Þ#ð (0°¡|˜HÜ$-×$4Ñ$4°XÓ$>˜EÞ$Ø/7Ð8M¼#¸e¿k¹kÈ!»nÓ:MÐ9MÐ/N ¨¡Ü1<×1AÑ1AÀ(Ó1K˜DŸI™IÔ.Ø-2Ð*ØŸ™×.Ñ.¨tÔ4Ú ð
 Ø#Ÿ{™{×3Ñ3Ó5˜Ø¤<Ò/Ü".Ò.Ù$Ù*¨4Ó0˜Þ!Ø ŸK™K×2Ñ2°4Ô8Ø!ñ ð —K‘K×0Ñ0°Ô?Ø"&§.¡.Ö"2˜Ø!¤\Ò1Ü".Ò.Ù$Ùñ	 #3ð —z‘z×6Ñ6Ó8¸KÓGØ#'§:¡:×#6Ñ#6˜Ø# r›>Ø26˜DŸJ™JÕ/Ø%Ñ1Ü!*×!1Ñ!1°(Ó!;˜BÞ!Ü&)¨"¯(©(°1«+Ó&6 Ø6>¸uÀÀ°o §
¡
Ô 3øà"&§*¡*×"5Ñ"5˜Ü% g¬s×3Ñ3Ü!*×!1Ñ!1°'Ó!:˜BÞ!Ø*1Ð2D´C¸¿¹À»Ó4DÐ3DÐ*E Ø6= §
¡
Ô 3Ø—K‘K×/Ñ/Ô1Ø×%Ñ%Ô'ð "&§¡�D•Jö .Ð-Ð-Ø—O‘O DÔ)ò_ öf "Ü×;Ò;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Ø—	‘	×%Ñ%¤k×&6Ñ&6°xÓ&@ÔAØ�Ø ŸKœK�DØœ|Ô+Ü*Ò*Ù ñ (ô &1×%5Ñ%5°hÓ%?�—	‘	Ô"Øö 'Ü×;Ò;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Øö Ø˜4‘à�ØŸœ�Øœ<Ò'Ü&Ò&ÙØ—‘ Ö%ñ	 $ö Ø$ Q™K�	Ü!Ÿ™¨	Ó2�ÞØ"+¬C°·±¸A³Ó,?Ð,@Ð"A�H˜Q‘KÜ!,×!1Ñ!1°(Ó!;ˆD�I‰IÔØð ˆØ—K”KˆDØ”|Ò#Ü"Ò"ÙØ�L‰L˜Öñ	  ð
 	�	‰	×Ñœk×.Ñ.¨uÓ5Õ6ùs   ƒ_&e:ß-Fe:c                 ó|  • Sn/ n[        U5       GHî  u  pEUS   S;   aX  U(       d>  [        R                  " U5      nU R                  R	                  U R
                  U5        MT  UR                  U5        Mg  U(       a5  U R
                  R                  " U R                  R                  U5      6   S/ p2UR                  S5      (       aË  US:X  aX  [        R                  U5      nU(       a  US [        UR                  S5      5      *  nU R
                  R                  U5        GM  U[        U5      S-
  :X  a  U R                  R!                  U5          g [        R"                  " U5      nU R
                  R$                  R                  U5        GM„  UR'                  S5      nUS:X  a>  [        R(                  " S5      nU R
                  R$                  R                  U5        GMÙ  US:”  d   S5       eUS U nU/nGMñ     U(       a3  U R
                  R                  " U R                  R                  U5      6   g g )	Nr	   r   z 	zFrom é   Ú:zMissing header name.z3_parse_headers fed line with no : and no leading WS)Ú	enumerater   Ú#FirstHeaderLineIsContinuationDefectrW   rv   rc   r   Úset_rawÚheader_source_parserŠ   r¡   r¢   r�   r    Úset_unixfromr_   r7   ÚMisplacedEnvelopeHeaderDefectÚdefectsÚfindÚInvalidHeaderDefect)	r   rD   Ú
lastheaderÚ	lastvalueÚlinenor1   rx   r®   Úis	            r   r–   ÚFeedParser._parse_headersØ  sÙ  € àˆ
Øˆ	Ü% e×,‰LˆFà�A‰w˜%ÓÞ!ô $×GÒGÈÓM�FØ—K‘K×-Ñ-¨d¯i©i¸Ô@ÙØ× Ñ  Ô&ÙÞØ—	‘	×!Ò! 4§;¡;×#BÑ#BÀ9Ó#MÑNØ(*¨B˜Ià�‰˜w×'Ñ'Ø˜Q“;ä"×)Ñ)¨$Ó/�BÞØ#Ð$6¤c¨"¯(©(°1«+Ó&6Ð%6Ð7˜Ø—I‘I×*Ñ*¨4Ô0ÚØœs 5›z¨A™~Ó-ð —K‘K×*Ñ*¨4Ô0Ùô $×AÒAÀ$ÓG�FØ—I‘I×%Ñ%×,Ñ,¨VÔ4Úð —	‘	˜#“ˆAð
 �A‹vÜ×3Ò3Ð4JÓK�Ø—	‘	×!Ñ!×(Ñ(¨Ô0Úà�Q“3ÐMÐMÓM�3Ø˜b˜q˜ˆJØ˜‹Iñg -öj Ø�I‰I×Ò˜tŸ{™{×>Ñ>¸yÓIÒJð r   )	rc   r]   re   r_   rd   r`   rZ   rb   rW   r   )rN   rO   rP   rQ   rR   r   r   rh   rl   rk   r)   r   rr   ra   r–   rS   rG   r   r   r   r   ˆ   s<   † Ù'ð"°ö "ò>!òò
òòòò|7õ|:Kr   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )r   i  z(Like FeedParser, but feed accepts bytes.c                 óD   >• [         TU ]  UR                  SS5      5        g )NÚasciiÚsurrogateescape)Úsuperrl   Údecode)r   r>   Ú	__class__s     €r   rl   ÚBytesFeedParser.feed  s   ø€ Ü‰‰�T—[‘[ Ð*;Ó<Õ=r   rG   )rN   rO   rP   rQ   rR   rl   rS   Ú__classcell__)rÌ   s   @r   r   r     s   ø† Ù2÷>ó >r   )rR   Ú__all__ÚreÚemailr   Úemail._policybaser   Úcollectionsr   Úior   Úcompiler”   r©   r¡   ÚNLCRE_crackr“   r˜   ÚNLr‹   Úobjectr-   r   r   r   rG   r   r   Ú<module>rÙ      s¾   ðñ
ð" Ð*Ð
+€ã 	å Ý &Ý Ý à
�
Š
�=Ó!€Ø�JŠJ�Ó'€	Ø�JŠJÐ(Ó)€	Ø�jŠj˜Ó)€ð �:Š:Ð>Ó?€Ø€Ø	€Ø—
’
Ø:ó<€ñ ‹x€ôW�fô W÷tJKñ JKôZ>�jõ >r   