U e5dÏ¡ã @s¸ddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dƒZ e e dƒBZe d ƒZee BZee d ƒZee d ƒZee d ƒBe d ƒZee BZee d ƒBZee BZee dƒZdd„Ze dejejB¡ZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd„deƒZ#Gdd„deƒZ$Gd d!„d!eƒZ%Gd"d#„d#eƒZ&Gd$d%„d%eƒZ'Gd&d'„d'e'ƒZ(Gd(d)„d)eƒZ)Gd*d+„d+eƒZ*Gd,d-„d-eƒZ+Gd.d/„d/eƒZ,Gd0d1„d1eƒZ-Gd2d3„d3eƒZ.Gd4d5„d5eƒZ/Gd6d7„d7eƒZ0Gd8d9„d9eƒZ1Gd:d;„d;eƒZ2Gdd?„d?eƒZ4Gd@dA„dAeƒZ5GdBdC„dCeƒZ6GdDdE„dEeƒZ7GdFdG„dGeƒZ8GdHdI„dIeƒZ9GdJdK„dKe!ƒZ:GdLdM„dMeƒZ;GdNdO„dOeƒZGdTdU„dUe>ƒZ?GdVdW„dWeƒZ@GdXdY„dYeƒZAGdZd[„d[eƒZBGd\d]„d]eƒZCGd^d_„d_eƒZDGd`da„daeDƒZEGdbdc„dceDƒZFGddde„deeƒZGGdfdg„dgeƒZHGdhdi„dieƒZIGdjdk„dkeIƒZJGdldm„dmeJƒZKGdndo„doeƒZLGdpdq„dqeMƒZNGdrds„dseNƒZOGdtdu„dueNƒZPGdvdw„dweOƒZQGdxdy„dye jRƒZSePd dzƒZTePd{d|ƒZUePd}d~ƒZVe d Wd€ Xe ¡¡¡jYZZe d� We [d€ Xe¡¡¡¡j\Z]e d‚¡j^Z_e d� We [d€ Xe¡¡¡¡j\Z`e d� We [d€ Xe¡¡¡¡j\Zae d� We [d€ Xe¡¡¡¡j\Zbdƒd„„Zcd…d†„Zdd‡dˆ„Zed‰dŠ„Zfd‹dŒ„Zgd�dŽ„Zhd�d�„Zid‘d’„Zjd“d”„Zkd•d–„Zld—d˜„Zmd™dš„Znd›dœ„Zod�dž„ZpdŸd „Zqd¡d¢„Zrd£d¤„Zsd¥d¦„Ztd§d¨„Zud©dª„Zvd«d¬„Zwd­d®„Zxd¯d°„Zyd±d²„Zzd³d´„Z{dµd¶„Z|d·d¸„Z}d¹dº„Z~d»d¼„Zd½d¾„Z€d¿dÀ„Z�dÁd„Z‚dÃdÄ„ZƒdÅdÆ„Z„dÇdÈ„Z…dÉdÊ„Z†dËdÌ„Z‡dÍd΄ZˆdÏdЄZ‰dÑdÒ„ZŠdÓdÔ„Z‹dÕdÖ„ZŒd×dØ„Z�dÙdÚ„ZŽdÛdÜ„Z�dÝdÞ„Z�dßdà„Z‘dádâ„Z’dãdä„Z“dådæ„Z”dçdè„Z•dédê„Z–dëdì„Z—dídî„Z˜dïdð„Z™dñdò„Zšdódô„Z›dõdö„ZœdS)÷éN)Ú hexdigits)Ú itemgetter)Ú_encoded_words)Úerrors)Úutilsz ú(z ()<>@,:;.\"[]Ú.z."(z/?=z*'%ú%cCs dt|ƒ dd¡ dd¡dS)Nú"ú\ú\\z\")ÚstrÚreplace©Úvalue©rú2/usr/lib64/python3.8/email/_header_value_parser.pyÚ quote_string`srzñ =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= csšeZdZdZdZdZ‡fdd„Zdd„Z‡fdd„Ze d d „ƒZ e d d „ƒZ d d„Z e dd„ƒZ e dd„ƒZdd„Zddd„Zddd„Zddd„Z‡ZS)Ú TokenListNTcstƒj||Žg|_dS©N)ÚsuperÚ__init__Údefects)ÚselfÚargsÚkw©Ú __class__rrryszTokenList.__init__cCsd dd„|Dƒ¡S)NÚcss|]}t|ƒVqdSr©r ©Ú.0ÚxrrrÚ ~sz$TokenList.__str__..©Újoin©rrrrÚ__str__}szTokenList.__str__csd |jjtƒ ¡¡S©Nz{}({})©ÚformatrÚ__name__rÚ__repr__r&rrrr,€s ÿzTokenList.__repr__cCsd dd„|Dƒ¡S)Nrcss|]}|jr|jVqdSrrr rrrr#†sz"TokenList.value..r$r&rrrr„szTokenList.valuecCstdd„|Dƒ|jƒS)Ncss|] }|jVqdSr)Ú all_defectsr rrrr#Šsz(TokenList.all_defects..)Úsumrr&rrrr-ˆszTokenList.all_defectscCs |d ¡S©Nr)Ústartswith_fwsr&rrrr0ŒszTokenList.startswith_fwscCstdd„|DƒƒS)Ncss|] }|jVqdSr)Ú as_ew_allowed)r!Úpartrrrr#’sz*TokenList.as_ew_allowed..)Úallr&rrrr1�szTokenList.as_ew_allowedcCsg}|D]}| |j¡q|Sr)ÚextendÚcomments)rr5Útokenrrrr5”szTokenList.commentscCs t||d�S)N©Úpolicy)Ú_refold_parse_tree©rr8rrrÚfold›szTokenList.foldrcCst|j|d�ƒdS)N©Úindent)ÚprintÚppstr©rr=rrrÚpprintžszTokenList.pprintcCsd |j|d�¡S)NÚ r<)r%Ú_ppr@rrrr?¡szTokenList.ppstrccszd ||jj|j¡V|D]4}t|dƒs:|d |¡Vq| |d¡EdHq|jrdd |j¡}nd}d ||¡VdS)Nz{}{}/{}(rCz* !! invalid element in token list: {!r}z z Defects: {}rz{}){})r*rr+Ú token_typeÚhasattrrCr)rr=r6ZextrarrrrC¤sý ÿ z TokenList._pp)r)r)r)r+Ú __module__Ú __qualname__rDÚsyntactic_breakÚew_combine_allowedrr'r,Úpropertyrr-r0r1r5r;rAr?rCÚ __classcell__rrrrrss&        rc@s$eZdZedd„ƒZedd„ƒZdS)ÚWhiteSpaceTokenListcCsdS©Nú rr&rrrr¸szWhiteSpaceTokenList.valuecCsdd„|DƒS)NcSsg|]}|jdkr|j‘qS)Úcomment)rDÚcontentr rrrÚ ¾s z0WhiteSpaceTokenList.comments..rr&rrrr5¼szWhiteSpaceTokenList.commentsN)r+rFrGrJrr5rrrrrL¶s rLc@seZdZdZdS)ÚUnstructuredTokenListÚ unstructuredN©r+rFrGrDrrrrrRÁsrRc@seZdZdZdS)ÚPhraseÚphraseNrTrrrrrUÅsrUc@seZdZdZdS)ÚWordZwordNrTrrrrrWÈsrWc@seZdZdZdS)ÚCFWSListÚcfwsNrTrrrrrXÌsrXc@seZdZdZdS)ÚAtomÚatomNrTrrrrrZÐsrZc@seZdZdZdZdS)ÚTokenr6FN)r+rFrGrDZ encode_as_ewrrrrr\Ôsr\c@seZdZdZdZdZdZdS)Ú EncodedWordú encoded-wordN)r+rFrGrDÚcteÚcharsetÚlangrrrrr]Ùsr]c@s4eZdZdZedd„ƒZedd„ƒZedd„ƒZdS) Ú QuotedStringú quoted-stringcCs"|D]}|jdkr|jSqdS©Núbare-quoted-string©rDr©rr"rrrrPäs zQuotedString.contentcCs>g}|D]*}|jdkr&| t|ƒ¡q| |j¡qd |¡S)Nrer)rDÚappendr rr%)rÚresr"rrrÚ quoted_valueês  zQuotedString.quoted_valuecCs"|D]}|jdkr|jSqdSrdrf©rr6rrrÚstripped_valueôs zQuotedString.stripped_valueN)r+rFrGrDrJrPrjrlrrrrrbàs  rbc@s$eZdZdZdd„Zedd„ƒZdS)ÚBareQuotedStringrecCstd dd„|Dƒ¡ƒS)Nrcss|]}t|ƒVqdSrrr rrrr#sz+BareQuotedString.__str__..)rr%r&rrrr'ÿszBareQuotedString.__str__cCsd dd„|Dƒ¡S)Nrcss|]}t|ƒVqdSrrr rrrr#sz)BareQuotedString.value..r$r&rrrrszBareQuotedString.valueN)r+rFrGrDr'rJrrrrrrmûsrmc@s8eZdZdZdd„Zdd„Zedd„ƒZedd „ƒZd S) ÚCommentrOcs(d tdg‡fdd„ˆDƒdgggƒ¡S)Nrrcsg|]}ˆ |¡‘qSr)Úquoter r&rrrQsz#Comment.__str__..ú))r%r.r&rr&rr' sýüzComment.__str__cCs2|jdkrt|ƒSt|ƒ dd¡ dd¡ dd¡S)NrOr r rz\(rpz\))rDr r)rrrrrros ÿþz Comment.quotecCsd dd„|Dƒ¡S)Nrcss|]}t|ƒVqdSrrr rrrr#sz"Comment.content..r$r&rrrrPszComment.contentcCs|jgSr)rPr&rrrr5szComment.commentsN) r+rFrGrDr'rorJrPr5rrrrrns rnc@s4eZdZdZedd„ƒZedd„ƒZedd„ƒZdS) Ú AddressListz address-listcCsdd„|DƒS)NcSsg|]}|jdkr|‘qS)Úaddress©rDr rrrrQ's z)AddressList.addresses..rr&rrrÚ addresses%szAddressList.addressescCstdd„|DƒgƒS)Ncss|]}|jdkr|jVqdS©rrN©rDÚ mailboxesr rrrr#+s ÿz(AddressList.mailboxes..©r.r&rrrrw)s ÿÿzAddressList.mailboxescCstdd„|DƒgƒS)Ncss|]}|jdkr|jVqdSru©rDÚ all_mailboxesr rrrr#0s ÿz,AddressList.all_mailboxes..rxr&rrrrz.s ÿÿzAddressList.all_mailboxesN)r+rFrGrDrJrtrwrzrrrrrq!s  rqc@s4eZdZdZedd„ƒZedd„ƒZedd„ƒZdS) ÚAddressrrcCs|djdkr|djSdS)NrÚgroup©rDÚ display_namer&rrrr~8szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djS©NrÚmailboxúinvalid-mailboxrvr&rrrrw=s  zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djSrryr&rrrrzEs   zAddress.all_mailboxesN)r+rFrGrDrJr~rwrzrrrrr{4s  r{c@s(eZdZdZedd„ƒZedd„ƒZdS)Ú MailboxListú mailbox-listcCsdd„|DƒS)NcSsg|]}|jdkr|‘qS)r€rsr rrrrQSs z)MailboxList.mailboxes..rr&rrrrwQszMailboxList.mailboxescCsdd„|DƒS)NcSsg|]}|jdkr|‘qS))r€r�rsr rrrrQWs ÿz-MailboxList.all_mailboxes..rr&rrrrzUszMailboxList.all_mailboxesN©r+rFrGrDrJrwrzrrrrr‚Ms  r‚c@s(eZdZdZedd„ƒZedd„ƒZdS)Ú GroupListú group-listcCs |r|djdkrgS|djS©Nrrƒrvr&rrrrw_szGroupList.mailboxescCs |r|djdkrgS|djSr‡ryr&rrrrzeszGroupList.all_mailboxesNr„rrrrr…[s  r…c@s4eZdZdZedd„ƒZedd„ƒZedd„ƒZdS) ÚGroupr|cCs|djdkrgS|djS©Nér†rvr&rrrrwpszGroup.mailboxescCs|djdkrgS|djSr‰ryr&rrrrzvszGroup.all_mailboxescCs |djSr/)r~r&rrrr~|szGroup.display_nameN)r+rFrGrDrJrwrzr~rrrrrˆls  rˆc@sLeZdZdZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed d „ƒZ d S) ÚNameAddrú name-addrcCst|ƒdkrdS|djS©Nér)Úlenr~r&rrrr~…s zNameAddr.display_namecCs |djS©Néÿÿÿÿ©Ú local_partr&rrrr“‹szNameAddr.local_partcCs |djSr�©Údomainr&rrrr•�szNameAddr.domaincCs |djSr�)Úrouter&rrrr–“szNameAddr.routecCs |djSr�©Ú addr_specr&rrrr˜—szNameAddr.addr_specN© r+rFrGrDrJr~r“r•r–r˜rrrrr‹�s    r‹c@s@eZdZdZedd„ƒZedd„ƒZedd„ƒZedd „ƒZd S) Ú AngleAddrz angle-addrcCs"|D]}|jdkr|jSqdS©Nú addr-spec)rDr“rgrrrr“ s zAngleAddr.local_partcCs"|D]}|jdkr|jSqdSr›©rDr•rgrrrr•¦s zAngleAddr.domaincCs"|D]}|jdkr|jSqdS)Nú obs-route)rDÚdomainsrgrrrr–¬s zAngleAddr.routecCs<|D]2}|jdkr|jr"|jSt|jƒ|jSqdS)Nrœz<>)rDr“r˜rrgrrrr˜²s   zAngleAddr.addr_specN) r+rFrGrDrJr“r•r–r˜rrrrršœs   ršc@seZdZdZedd„ƒZdS)ÚObsRouteržcCsdd„|DƒS)NcSsg|]}|jdkr|j‘qSr”r�r rrrrQÄs z$ObsRoute.domains..rr&rrrrŸÂszObsRoute.domainsN)r+rFrGrDrJrŸrrrrr ¾sr c@sLeZdZdZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed d „ƒZ d S) ÚMailboxr€cCs|djdkr|djSdS©NrrŒr}r&rrrr~ËszMailbox.display_namecCs |djSr/r’r&rrrr“ÐszMailbox.local_partcCs |djSr/r”r&rrrr•ÔszMailbox.domaincCs|djdkr|djSdSr¢)rDr–r&rrrr–Øsz Mailbox.routecCs |djSr/r—r&rrrr˜ÝszMailbox.addr_specNr™rrrrr¡Çs    r¡c@s,eZdZdZedd„ƒZeZZZZ dS)ÚInvalidMailboxr�cCsdSrrr&rrrr~æszInvalidMailbox.display_nameNr™rrrrr£âs r£cs(eZdZdZdZe‡fdd„ƒZ‡ZS)ÚDomainr•Fcsd tƒj ¡¡S©Nr©r%rrÚsplitr&rrrr•òsz Domain.domain)r+rFrGrDr1rJr•rKrrrrr¤ísr¤c@seZdZdZdS)ÚDotAtomúdot-atomNrTrrrrr¨÷sr¨c@seZdZdZdZdS)Ú DotAtomTextz dot-atom-textTN©r+rFrGrDr1rrrrrªûsrªc@seZdZdZdZdS)Ú NoFoldLiteralzno-fold-literalFNr«rrrrr¬sr¬c@sDeZdZdZdZedd„ƒZedd„ƒZedd„ƒZed d „ƒZ d S) ÚAddrSpecrœFcCs |djSr/r’r&rrrr“ szAddrSpec.local_partcCst|ƒdkrdS|djS)Nér‘)r�r•r&rrrr•s zAddrSpec.domaincCs<t|ƒdkr|djS|dj ¡|dj|dj ¡S)Nr®rrŽrŠ)r�rÚrstripÚlstripr&rrrrs  zAddrSpec.valuecCsLt|jƒ}t|ƒt|tƒkr*t|jƒ}n|j}|jdk rH|d|jS|S)Nú@)Úsetr“r�Ú DOT_ATOM_ENDSrr•)rZnamesetZlprrrr˜s   zAddrSpec.addr_specN) r+rFrGrDr1rJr“r•rr˜rrrrr­s   r­c@seZdZdZdZdS)Ú ObsLocalPartzobs-local-partFNr«rrrrr´&sr´cs4eZdZdZdZedd„ƒZe‡fdd„ƒZ‡ZS)Ú DisplayNamez display-nameFcCs¦t|ƒ}t|ƒdkr|jS|djdkr4| d¡n*|ddjdkr^t|ddd…ƒ|d<|djdkrv| ¡n*|ddjdkr t|ddd…ƒ|d<|jS)NrrYrŽr‘)rr�rrDÚpop)rrirrrr~1s   zDisplayName.display_namecs¦d}|jrd}n|D]}|jdkrd}qt|ƒdkrš|ršd}}|djdks`|ddjdkrdd}|djdks„|ddjdkrˆd}|t|jƒ|StƒjSdS) NFTrcrrrYrNr‘)rrDr�rr~rr)rror"ZpreZpostrrrrBs   zDisplayName.value) r+rFrGrDrIrJr~rrKrrrrrµ,s  rµc@s,eZdZdZdZedd„ƒZedd„ƒZdS)Ú LocalPartz local-partFcCs&|djdkr|djS|djSdS)Nrrc)rDrjrr&rrrr[s zLocalPart.valuecCsÈtg}t}d}|dtgD]”}|jdkr,q|r\|jdkr\|djdkr\t|dd…ƒ|d<t|tƒ}|rš|jdkrš|djdkrš| t|dd…ƒ¡n | |¡|d}|}qt|dd…ƒ}|jS)NFrrYÚdotr‘rŽ)ÚDOTrDrÚ isinstancerhr)rriZlastZ last_is_tlÚtokZis_tlrrrr“bs(  ÿ  ÿ zLocalPart.local_partN)r+rFrGrDr1rJrr“rrrrr·Vs  r·cs4eZdZdZdZe‡fdd„ƒZedd„ƒZ‡ZS)Ú DomainLiteralzdomain-literalFcsd tƒj ¡¡Sr¥r¦r&rrrr•szDomainLiteral.domaincCs"|D]}|jdkr|jSqdS)NÚptextrfrgrrrÚipƒs zDomainLiteral.ip) r+rFrGrDr1rJr•r¾rKrrrrr¼zs r¼c@seZdZdZdZdZdS)Ú MIMEVersionz mime-versionN)r+rFrGrDÚmajorÚminorrrrrr¿Šsr¿c@s4eZdZdZdZdZdZedd„ƒZedd„ƒZ dS) Ú ParameterÚ parameterFúus-asciicCs|jr|djSdSr�)Ú sectionedÚnumberr&rrrÚsection_number˜szParameter.section_numbercCsf|D]\}|jdkr|jS|jdkr|D]4}|jdkr*|D] }|jdkr<|jSqrr+rDr&rrrrAuszTerminal.pprintcCs t|jƒSr)Úlistrr&rrrr-xszTerminal.all_defectsrc s2d ||jj|jtƒ ¡|js"dn d |j¡¡gS)Nz {}{}/{}({}){}rz {})r*rr+rDrr,rr@rrrrC|sûz Terminal._ppcCsdSrrr&rrrÚpop_trailing_ws…szTerminal.pop_trailing_wscCsgSrrr&rrrr5‰szTerminal.commentscCst|ƒ|jfSr)r rDr&rrrÚ__getnewargs__�szTerminal.__getnewargs__)r)r+rFrGr1rIrHrûr,rArJr-rCrÿr5rrKrrrrrúfs     rúc@s eZdZedd„ƒZdd„ZdS)ÚWhiteSpaceTerminalcCsdSrMrr&rrrr“szWhiteSpaceTerminal.valuecCsdS)NTrr&rrrr0—sz!WhiteSpaceTerminal.startswith_fwsN©r+rFrGrJrr0rrrrr‘s rc@s eZdZedd„ƒZdd„ZdS)Ú ValueTerminalcCs|Srrr&rrrr�szValueTerminal.valuecCsdS)NFrr&rrrr0¡szValueTerminal.startswith_fwsNrrrrrr›s rc@s eZdZedd„ƒZdd„ZdS)ÚEWWhiteSpaceTerminalcCsdSr¥rr&rrrr§szEWWhiteSpaceTerminal.valuecCsdSr¥rr&rrrr'«szEWWhiteSpaceTerminal.__str__N)r+rFrGrJrr'rrrrr¥s rc@s eZdZdS)Ú_InvalidEwErrorN)r+rFrGrrrrr¯srr¸ú,úlist-separatorr±zroute-component-markerz([{}]+)rz[^{}]+z[\x00-\x20\x7F]cCs>t|ƒ}|r|j t |¡¡t |¡r:|j t d¡¡dS)Nz*Non-ASCII characters found in header token)Ú_non_printable_finderrrhrZNonPrintableDefectrrârã)ÚxtextZnon_printablesrrrÚ_validate_xtextÚs  ÿr cCs t|dƒ^}}g}d}d}tt|ƒƒD]L}||dkrJ|rDd}d}nd}q&|rTd}n|||krdq|| ||¡q&|d}d |¡d ||d…g|¡|fS)NrŽFr Tr)Ú _wsp_splitterÚranger�rhr%)rÚendcharsZfragmentÚ remainderZvcharsÚescapeÚhad_qpÚposrrrÚ_get_ptext_to_endcharsäs$   rcCs.| ¡}t|dt|ƒt|ƒ…dƒ}||fS)NÚfws)r°rr�)rZnewvaluerrrrÚget_fwssrc CsØtƒ}| d¡s t d |¡¡‚|dd… dd¡^}}||dd…krXt d |¡¡‚d |¡}t|ƒdkr°|dtkr°|dtkr°|  d¡dkr°| dd¡^}}|d|}t| ¡ƒdkrÒ|j   t  d ¡¡||_ d |¡}zt d|d¡\}}}} Wn*ttfk �r*td  |j ¡ƒ‚YnX||_||_|j  | ¡|�rª|dtk�rrt|ƒ\} }|  | ¡�qDt|dƒ^} }t| d ƒ} t| ƒ|  | ¡d |¡}�qD|�rÐ|dtk�rÐ|j   t  d ¡¡||fS) Nú=?z"expected encoded word but found {}rŠz?=rŽrrú?zwhitespace inside encoded wordz!encoded word format invalid: '{}'Úvtextz.missing trailing whitespace after encoded-word)r]Ú startswithrÚHeaderParseErrorr*r§r%r�rÚcountrrhrÜr_Ú_ewràÚ ValueErrorÚKeyErrorrr`rar4ÚWSPrr rr ) rZewr»rZremstrÚrestrír`rarr6ÚcharsrrrrÚget_encoded_wordsd ÿÿ   ÿ þ ý  ÿ  ÿ       ÿr!cCsFtƒ}|�rB|dtkr0t|ƒ\}}| |¡qd}| d¡rìzt|ƒ\}}Wn,tk rfd}Yn†tjk rzYnrXd}t |ƒdkr°|dj dkr°|j  t  d¡¡d}|ràt |ƒdkrà|d j d kràt |ddƒ|d<| |¡qt|dƒ^}}|�rt |¡�r| d¡^}}t|d ƒ}t|ƒ| |¡d  |¡}q|S) NrTrFr‘rz&missing whitespace before encoded wordrŽéþÿÿÿr^rr)rRrrrhrr!rrrr�rDrrÜrr Úrfc2047_matcherÚsearchÚ partitionrr r%)rrSr6Úvalid_ewZhave_wsr»rrrrrÚget_unstructured?sJ      ÿÿ    r'cCs*t|dƒ\}}}t|dƒ}t|ƒ||fS)Nz()r½)rrr ©rr½Ú_rrrÚ get_qp_ctext‚s  r*cCs*t|dƒ\}}}t|dƒ}t|ƒ||fS)Nr r½)rrr r(rrrÚ get_qcontent“s  r+cCsNt|ƒ}|st d |¡¡‚| ¡}|t|ƒd…}t|dƒ}t|ƒ||fS)Nzexpected atext but found '{}'Úatext)Ú_non_atom_end_matcherrrr*r|r�rr )rÚmr,rrrÚ get_atext¢sÿ r/cCsr|ddkrt d |¡¡‚tƒ}|dd…}|rT|ddkrTt|ƒ\}}| |¡|�rB|ddk�rB|dtkr‚t|ƒ\}}n´|dd…dk�r*d}z&t|ƒ\}}|j  t  d¡¡d }Wn"tjk ràt|ƒ\}}YnX|�r6t |ƒdk�r6|d j d k�r6|d j d k�r6t |d d ƒ|d <n t|ƒ\}}| |¡qT|�sb|j  t  d¡¡||fS||dd…fS)Nrr zexpected '"' but found '{}'rŽrŠrFz!encoded word inside quoted stringTr‘rr"r^z"end of header inside quoted string)rrr*rmr+rhrrr!rrÜr�rDr)rZbare_quoted_stringr6r&rrrÚget_bare_quoted_string²sL ÿ      ÿ ÿÿ    ÿr0cCs¼|r |ddkr t d |¡¡‚tƒ}|dd…}|rŽ|ddkrŽ|dtkr\t|ƒ\}}n&|ddkrvt|ƒ\}}n t|ƒ\}}| |¡q2|s¬|j  t  d¡¡||fS||dd…fS)Nrrzexpected '(' but found '{}'rŽrpzend of header inside comment) rrr*rnrrÚ get_commentr*rhrrÜ)rrOr6rrrr1Ýs&ÿ      ÿr1cCsPtƒ}|rH|dtkrH|dtkr0t|ƒ\}}n t|ƒ\}}| |¡q||fSr/)rXÚ CFWS_LEADERrrr1rh)rrYr6rrrÚget_cfwsös   r3cCsptƒ}|r,|dtkr,t|ƒ\}}| |¡t|ƒ\}}| |¡|rh|dtkrht|ƒ\}}| |¡||fSr/)rbr2r3rhr0)rZ quoted_stringr6rrrÚget_quoted_strings      r4cCsÐtƒ}|r,|dtkr,t|ƒ\}}| |¡|rL|dtkrLt d |¡¡‚| d¡rŒzt |ƒ\}}Wq˜tjk rˆt |ƒ\}}Yq˜Xn t |ƒ\}}| |¡|rÈ|dtkrÈt|ƒ\}}| |¡||fS)Nrzexpected atom but found '{}'r) rZr2r3rhÚ ATOM_ENDSrrr*rr!r/)rr[r6rrrÚget_atoms&  ÿ     r6cCsœtƒ}|r|dtkr&t d |¡¡‚|rt|dtkrtt|ƒ\}}| |¡|r&|ddkr&| t¡|dd…}q&|dtkr”t d d|¡¡‚||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'rrŽr‘z4expected atom at end of dot-atom-text but found '{}')rªr5rrr*r/rhr¹)rZ dot_atom_textr6rrrÚget_dot_atom_text0s ÿ    ÿr7cCs¬tƒ}|dtkr(t|ƒ\}}| |¡| d¡rhzt|ƒ\}}Wqttjk rdt|ƒ\}}YqtXn t|ƒ\}}| |¡|r¤|dtkr¤t|ƒ\}}| |¡||fS)Nrr) r¨r2r3rhrr!rrr7)rZdot_atomr6rrrÚ get_dot_atomCs        r8cCsŽ|dtkrt|ƒ\}}nd}|s,t d¡‚|ddkrFt|ƒ\}}n*|dtkrdt d |¡¡‚n t|ƒ\}}|dk r†|g|dd…<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.r z1Expected 'atom' or 'quoted-string' but found '{}')r2r3rrr4ÚSPECIALSr*r6)rÚleaderr6rrrÚget_word\s" ÿ  ÿ r;cCsútƒ}zt|ƒ\}}| |¡Wn(tjk rH|j t d¡¡YnX|rò|dtkrò|ddkr�| t¡|j t  d¡¡|dd…}qJzt|ƒ\}}WnDtjk rä|dt krÞt |ƒ\}}|j t  d¡¡n‚YnX| |¡qJ||fS)Nzphrase does not start with wordrrzperiod in 'phrase'rŽzcomment found without atom) rUr;rhrrrrÜÚ PHRASE_ENDSr¹ÚObsoleteHeaderDefectr2r3)rrVr6rrrÚ get_phrase~s4   ÿ    ÿ   ÿ r>c Csvtƒ}d}|dtkr"t|ƒ\}}|s6t d |¡¡‚zt|ƒ\}}Wn^tjk r¤zt|ƒ\}}Wn6tjk rž|ddkr”|dtkr”‚t ƒ}YnXYnX|dk r¼|g|dd…<|  |¡|�r4|ddksæ|dtk�r4t t |ƒ|ƒ\}}|j dk�r|j  t d¡¡n|j  t d¡¡||d<z|j d¡Wn(tk �rl|j  t d¡¡YnX||fS) Nrz"expected local-part but found '{}'r úinvalid-obs-local-partz|ddk�r>| t¡|dd…}|sä�q>|dtk�rt|ƒ\}}| |¡|ddkr²| t¡t |dd…ƒ\}}| |¡q²|�sNt d¡‚|ddk�rlt d |¡¡‚| t dd ƒ¡||dd…fS) NrrrŽr±z(expected obs-route domain but found '{}'z%end of header while parsing obs-routeú:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker) r r2r3rhÚ ListSeparatorrrr*ÚRouteComponentMarkerrMr)rZ obs_router6rrrÚ get_obs_routessF     ÿ          ÿrSc Cs²tƒ}|dtkr(t|ƒ\}}| |¡|r8|ddkrHt d |¡¡‚| tddƒ¡|dd…}|ddkr¦| tddƒ¡|j t  d¡¡|dd…}||fSzt |ƒ\}}Wnztjk �r0z"t |ƒ\}}|j t  d ¡¡Wn(tjk �rt d  |¡¡‚YnX| |¡t |ƒ\}}YnX| |¡|�r^|ddk�r^|dd…}n|j t  d ¡¡| tddƒ¡|�rª|dtk�rªt|ƒ\}}| |¡||fS) Nrúzangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr) ršr2r3rhrrr*rrrÜrOrSr=)rZ angle_addrr6rrrÚget_angle_addrœsT   ÿ   ÿ   ÿ ÿ    ÿ  rVcCs<tƒ}t|ƒ\}}| |dd…¡|jdd…|_||fSr)rµr>r4r)rr~r6rrrÚget_display_nameÊs  rWcCsÚtƒ}d}|dtkr6t|ƒ\}}|s6t d |¡¡‚|ddkr¦|dtkr^t d |¡¡‚t|ƒ\}}|s~t d |¡¡‚|dk rœ|g|ddd…<d}| |¡t |ƒ\}}|dk rÈ|g|dd…<| |¡||fS)Nrz!expected name-addr but found '{}'rT) r‹r2r3rrr*r<rWrhrV)rZ name_addrr:r6rrrÚ get_name_addrÙs6  ÿ  ÿ ÿ   rXc Cs’tƒ}zt|ƒ\}}WnNtjk rdzt|ƒ\}}Wn&tjk r^t d |¡¡‚YnXYnXtdd„|jDƒƒr€d|_|  |¡||fS)Nzexpected mailbox but found '{}'css|]}t|tjƒVqdSr)rºrrÜr rrrr#sÿzget_mailbox..r�) r¡rXrrrOr*Úanyr-rDrh)rr€r6rrrÚ get_mailbox÷s ÿÿ rZcCsdtƒ}|r\|d|kr\|dtkrD| t|ddƒ¡|dd…}qt|ƒ\}}| |¡q||fS)NrrErŽ)r£r<rhrr>)rr Zinvalid_mailboxr6rrrÚget_invalid_mailbox s  ÿ  r[cCsºtƒ}|�r²|ddk�r²zt|ƒ\}}| |¡W�ntjk �r<d}|dtkrÖt|ƒ\}}|rv|ddkr”| |¡|j t d¡¡n@t |dƒ\}}|dk r¸|g|dd…<| |¡|j t  d¡¡nb|ddkrö|j t d¡¡nBt |dƒ\}}|dk �r|g|dd…<| |¡|j t  d¡¡YnX|�rŠ|ddk�rŠ|d}d|_ t |dƒ\}}|  |¡|j t  d¡¡|r|ddkr| t ¡|d d…}q||fS) Nrú;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrr‘r�rŽ)r‚rZrhrrr2r3rr=r[rÜrDr4rQ)rZ mailbox_listr6r:r€rrrÚget_mailbox_listsX      ÿ  ÿ  ÿ   ÿ   ÿ r]cCstƒ}|s$|j t d¡¡||fSd}|rŠ|dtkrŠt|ƒ\}}|sl|j t d¡¡| |¡||fS|ddkrŠ| |¡||fSt|ƒ\}}t|j ƒdkrÚ|dk r¶| |¡|  |¡|j t  d¡¡||fS|dk rð|g|dd…<| |¡||fS)Nzend of header before group-listrzend of header in group-listr\zgroup-list with empty entries) r…rrhrrÜr2r3r]r�rzr4r=)rZ group_listr:r6rrrÚget_group_listWs> ÿ  ÿ       ÿ r^cCs tƒ}t|ƒ\}}|r"|ddkr2t d |¡¡‚| |¡| tddƒ¡|dd…}|rˆ|ddkrˆ| tddƒ¡||dd…fSt|ƒ\}}| |¡|s¶|j t  d¡¡n|ddkrÒt d  |¡¡‚| tddƒ¡|dd…}|�r|dt k�rt |ƒ\}}| |¡||fS) NrrPz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrŽr\zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rˆrWrrr*rhrr^rrÜr2r3)rr|r6rrrÚ get_group|s8 ÿ     ÿ ÿ   r_c Csxtƒ}zt|ƒ\}}WnNtjk rdzt|ƒ\}}Wn&tjk r^t d |¡¡‚YnXYnX| |¡||fS)Nzexpected address but found '{}')r{r_rrrZr*rh)rrrr6rrrÚ get_addressšsÿ r`c CsÄtƒ}|�r¼zt|ƒ\}}| |¡W�n tjk �rH}zþd}|dtkrÐt|ƒ\}}|rj|ddkrˆ| |¡|j t d¡¡nFt |dƒ\}}|dk r¬|g|dd…<| t |gƒ¡|j t  d¡¡nh|ddkrð|j t d¡¡nHt |dƒ\}}|dk �r|g|dd…<| t |gƒ¡|j t  d¡¡W5d}~XYnX|�rš|ddk�rš|dd}d|_ t |dƒ\}}|  |¡|j t  d¡¡|r| tddƒ¡|d d…}q||fS) Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listr‘r�rrŽ)rqr`rhrrr2r3rr=r[r{rÜrDr4r)rZ address_listr6Úerrr:r€rrrÚget_address_list·sX      ÿ ÿ  ÿ  ÿ   ÿrbcCs¨tƒ}|st d |¡¡‚|ddkr6t d |¡¡‚| tddƒ¡|dd…}t|ƒ\}}| |¡|rx|ddkrˆt d |¡¡‚| tdd ƒ¡||dd…fS) Nz'expected no-fold-literal but found '{}'rrKz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrŽrGz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r¬rrr*rhrrF)rZno_fold_literalr6rrrÚget_no_fold_literalîs.ÿ ÿÿ   ÿÿrccCsŠtƒ}|r,|dtkr,t|ƒ\}}| |¡|r<|ddkrLt d |¡¡‚| tddƒ¡|dd…}zt|ƒ\}}Wn`tjk rØz"t |ƒ\}}|j  t  d¡¡Wn&tjk rÒt d |¡¡‚YnXYnX| |¡|rö|ddk�r@|j  t  d ¡¡|�r8|dd k�r8| td d ƒ¡|dd…}||fS| tdd ƒ¡|dd…}zt|ƒ\}}Wnœtjk �rzt |ƒ\}}Wnrtjk �r}zPz"t|ƒ\}}|j  t  d ¡¡Wn(tjk �rðt d |¡¡‚YnXW5d}~XYnXYnX| |¡|�r6|dd k�r6|dd…}n|j  t  d¡¡| td d ƒ¡|�r‚|dtk�r‚t|ƒ\}}| |¡||fS)NrrTzexpected msg-id but found '{}'z msg-id-startrŽzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'r±zmsg-id with no id-rightrUz msg-id-endrNzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)rôr2r3rhrrr*rr7rArr=rÜrcrM)rZmsg_idr6ÚerrrÚ get_msg_ids~  ÿ   ÿ ÿÿ  ÿ    ÿ ÿÿ"  ÿ  rec CsŽtƒ}zt|ƒ\}}| |¡WnLtjk rl}z,t|ƒ}t|ƒ}|j t d  |¡¡¡W5d}~XYnX|rŠ|j t d  |¡¡¡|S)NzInvalid msg-id: {!r}zUnexpected {!r}) rörerhrrr'r÷rrÜr*)rZ message_idr6ZexrrrÚparse_message_idIs ÿ ÿrfcCsštƒ}|s |j t d¡¡|S|dtkrXt|ƒ\}}| |¡|sX|j t d¡¡d}|r’|ddkr’|dtkr’||d7}|dd…}q\| ¡sÄ|j t d  |¡¡¡| t |dƒ¡nt |ƒ|_ | t |d ƒ¡|�r|dtk�rt|ƒ\}}| |¡|�r|ddk�rT|j dk �r:|j t d ¡¡|�rP| t |dƒ¡|S| t dd ƒ¡|dd…}|�rš|dtk�ršt|ƒ\}}| |¡|�sÂ|j dk �r¾|j t d ¡¡|Sd}|�rö|dtk�rö||d7}|dd…}�qÆ| ¡�s*|j t d   |¡¡¡| t |dƒ¡nt |ƒ|_ | t |d ƒ¡|�rn|dtk�rnt|ƒ\}}| |¡|�r–|j t d ¡¡| t |dƒ¡|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSrrrŽz1Expected MIME major version number but found {!r}r Údigitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)r¿rrhrÚHeaderMissingRequiredValuer2r3ÚisdigitrÜr*rÚintrÀrÁ)rZ mime_versionr6rgrrrÚparse_mime_versiones„ ÿ    ÿ  ÿ     ÿ     ÿ   ÿ    ÿrkcCsdtƒ}|r\|ddkr\|dtkrD| t|ddƒ¡|dd…}qt|ƒ\}}| |¡q||fS)Nrr\rErŽ)rÊr<rhrr>)rZinvalid_parameterr6rrrÚget_invalid_parameter©s  ÿ  rlcCsNt|ƒ}|st d |¡¡‚| ¡}|t|ƒd…}t|dƒ}t|ƒ||fS)Nzexpected ttext but found '{}'Úttext)Ú_non_token_end_matcherrrr*r|r�rr )rr.rmrrrÚ get_ttext»s ÿ rocCs�tƒ}|r,|dtkr,t|ƒ\}}| |¡|rL|dtkrLt d |¡¡‚t|ƒ\}}| |¡|rˆ|dtkrˆt|ƒ\}}| |¡||fS©Nrzexpected token but found '{}') r\r2r3rhÚ TOKEN_ENDSrrr*ro)rZmtokenr6rrrÚ get_tokenÎs   ÿ    rrcCsNt|ƒ}|st d |¡¡‚| ¡}|t|ƒd…}t|dƒ}t|ƒ||fS)Nz expected attrtext but found {!r}rÎ)Ú_non_attribute_end_matcherrrr*r|r�rr ©rr.rÎrrrÚ get_attrtextås ÿ rucCs�tƒ}|r,|dtkr,t|ƒ\}}| |¡|rL|dtkrLt d |¡¡‚t|ƒ\}}| |¡|rˆ|dtkrˆt|ƒ\}}| |¡||fSrp) rÌr2r3rhÚATTRIBUTE_ENDSrrr*ru©rrÍr6rrrÚ get_attributeøs   ÿ    rxcCsNt|ƒ}|st d |¡¡‚| ¡}|t|ƒd…}t|dƒ}t|ƒ||fS)Nz)expected extended attrtext but found {!r}úextended-attrtext)Ú#_non_extended_attribute_end_matcherrrr*r|r�rr rtrrrÚget_extended_attrtext sÿ r{cCs�tƒ}|r,|dtkr,t|ƒ\}}| |¡|rL|dtkrLt d |¡¡‚t|ƒ\}}| |¡|rˆ|dtkrˆt|ƒ\}}| |¡||fSrp) rÌr2r3rhÚEXTENDED_ATTRIBUTE_ENDSrrr*r{rwrrrÚget_extended_attribute! s  ÿ    r}cCsØtƒ}|r|ddkr&t d |¡¡‚| tddƒ¡|dd…}|rR|d ¡sbt d |¡¡‚d}|r�|d ¡r�||d7}|dd…}qf|ddkr¶|dkr¶|j t d ¡¡t |ƒ|_ | t|d ƒ¡||fS) NrÚ*zExpected section but found {}zsection-markerrŽz$Expected section number but found {}rÚ0z'section number has an invalid leading 0rg) rÑrrr*rhrrirZInvalidHeaderErrorrjrÆ)rrÒrgrrrÚ get_section7 s, ÿ ÿ  ÿ r€cCs’tƒ}|st d¡‚d}|dtkr0t|ƒ\}}|sDt d |¡¡‚|ddkr^t|ƒ\}}n t|ƒ\}}|dk r€|g|dd…<| |¡||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r ) rÓrrr2r3r*r4r}rh)rÚvr:r6rrrÚ get_valueU s"   ÿ   r‚c Cs�tƒ}t|ƒ\}}| |¡|r,|ddkrL|j t d |¡¡¡||fS|ddkrÌz t|ƒ\}}d|_| |¡Wntj k rŽYnX|sžt  d¡‚|ddkrÌ| t ddƒ¡|dd…}d|_ |dd krât  d ¡‚| t d d ƒ¡|dd…}d}|�r,|dt k�r,t |ƒ\}}| |¡d}|}|j �rF|�rF|dd k�rFt|ƒ\}}|j}d }|jdk�r²|�rŒ|ddk�rŒd}n$t|ƒ\}} | �rÚ| ddk�rÚd}n(zt|ƒ\}} Wn Yn X| �sÚd}|�r0|j t d¡¡| |¡|D](} | jdk�rg| dd…<| }�q*�q|}nd}|j t d¡¡|�r`|ddk�r`d}n t|ƒ\}}|j �r€|jdk�rÆ|�r”|ddk�r´| |¡|dk �r¬|}||fS|j t d¡¡|�sü|j t d¡¡| |¡|dk�rì||fSnð|dk �r@|D]} | jdk�r �q$�q | jdk| | ¡| j|_|ddk�r^t  d |¡¡‚| t ddƒ¡|dd…}|�rÐ|ddk�rÐt|ƒ\}}| |¡|j|_|�rÀ|ddk�rÐt  d |¡¡‚| t ddƒ¡|dd…}|dk �rdtƒ} |�r^|dtk�rt|ƒ\}}n2|dd k�rDt d dƒ}|dd…}n t|ƒ\}}|  |¡�qü| }n t|ƒ\}}| |¡|dk �rˆ|}||fS)Nrr\z)Parameter contains name ({}) but no valuer~TzIncomplete parameterzextended-parameter-markerrŽú=zParameter not followed by '='úparameter-separatorr Fú'z5Quoted string value for extended parameter is invalidrezZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersryrÎz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rÂrxrhrrrÜr*r€rÅrrrÉr2r3r4rlrÇrur{rDr‚rr`rarÓrrr+) rrèr6r:rZappendtoZqstringZ inner_valueZ semi_validrÚtr�rrrÚ get_parameterk sð   ÿ              ÿ     ÿ    ÿ ÿ        ÿ   ÿ       r‡c Csjtƒ}|�rfzt|ƒ\}}| |¡WnÌtjk rò}z¬d}|dtkrVt|ƒ\}}|sp| |¡|WY¢xS|ddkr¢|dk rŽ| |¡|j t d¡¡n@t |ƒ\}}|rÀ|g|dd…<| |¡|j t d  |¡¡¡W5d}~XYnX|�rD|ddk�rD|d}d|_ t |ƒ\}}|  |¡|j t d  |¡¡¡|r| t ddƒ¡|d d…}q|S) Nrr\zparameter entry with no contentzinvalid parameter {!r}r‘rËz)parameter with invalid trailing text {!r}r„rŽ)rÔr‡rhrrr2r3rrÜrlr*rDr4r)rZmime_parametersr6rar:rèrrrÚparse_mime_parametersù sJ         ÿ   ÿ   ÿrˆcCsˆ|rV|ddkrV|dtkr>| t|ddƒ¡|dd…}qt|ƒ\}}| |¡q|s^dS| tddƒ¡| t|dd…ƒ¡dS)Nrr\rErŽr„)r<rhrr>rˆ)Z tokenlistrr6rrrÚ_find_mime_parameters- s   r‰c Cs¶tƒ}d}|s$|j t d¡¡|Szt|ƒ\}}Wn<tjk rp|j t d |¡¡¡t ||ƒ|YSX| |¡|rŒ|ddkr°|j t d¡¡|r¬t ||ƒ|S|j   ¡  ¡|_ | tddƒ¡|dd…}zt|ƒ\}}Wn>tjk �r*|j t d  |¡¡¡t ||ƒ|YSX| |¡|j   ¡  ¡|_|�sP|S|dd k�rŒ|j t d  |¡¡¡|` |`t ||ƒ|S| td d ƒ¡| t|dd…ƒ¡|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rrýzInvalid content typezcontent-type-separatorrŽz'Expected content subtype but found {!r}r\z)rZ cte_headerr6rrrÚ&parse_content_transfer_encoding_header” s4 ÿ ÿ   ÿ   r�cCsDd}|r@|dr@|ddtkr@|dd}|ddd…|d<|S)Nrr‘)r)ÚlinesZwsprrrÚ_steal_trailing_WSP_if_existsà s  r�cCsº|jp tj}|jrdnd}dg}d}d}d}tddƒ}t|ƒ} | �r¨|  d¡} | |kr`|d8}q>t| ƒ} | jdkr‚t | ƒt @r‚d }z|   |¡|} Wn6t k rÊt d d „| jDƒƒr¾d } nd} d }YnX| jd kræt| |||ƒq>|�r¤|�s¤| j�spd}d}| j�rp| j|d�dt|jƒ …} |j| k�rpt| ƒ|t|dƒk�r^t|ƒ}| |¡|d| 7<q>t| dƒ�sŠt| ƒ| } nt| |||| j| ƒ}d}q>t| ƒ|t|dƒk�rÐ|d| 7<q>| j�rt| ƒd|k�rt|ƒ}|�s|  ¡�r| || ¡d}q>t| dƒ�sNt| ƒ}| j�sD|d7}| |¡|| } q>| j�rn|�sn|  d| ¡d }q>t|ƒ}|�s†|  ¡�r–| || ¡q>|d| 7<q>|j |¡|jS)Núutf-8rÄrrFÚwrap_as_ew_blockedrŽr½Tcss|]}t|tjƒVqdSr)rºrrãr rrrr#ä sÿz%_refold_parse_tree..ú unknown-8bitrÕr7r‘rB)Zmax_line_lengthÚsysÚmaxsizeÚutf8rúrþr¶r rDr²r9rBrßrYr-Ú_fold_mime_parametersr1rHr;r�rõr�rhrEÚ _fold_as_ewrIr0Úinsertr%)Z parse_treer8Úmaxlenr×rŽÚlast_ewr‘Z want_encodingZend_ew_not_allowedrær2Útstrr`Z encoded_partÚnewlineZnewpartsrrrr9Ê s˜    ÿ       ÿÿ   r9cCsà|dk r<|rrDrArFrJrLrMrOrSrVrWrXrZr[r]r^r_r`rbrcrerfrkrlrorrrurxr{r}r€r‚r‡rˆr‰r‹rŒr�r�r9r—r–rrrrÚFs,           øC  "   !*$ V +      ÿ ÿÿÿ  1C+ "&'/'&).9%7ED49/gA