HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/email/__pycache__/_header_value_parser.cpython-310.opt-2.pyc
o

�i��	@s�	ddlZddlZddlZddlmZddlmZddlmZ	ddlm
Z
ddlmZe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�Z2Gd<d=�d=e�Z3Gd>d?�d?e�Z4Gd@dA�dAe�Z5GdBdC�dCe�Z6GdDdE�dEe�Z7GdFdG�dGe�Z8GdHdI�dIe�Z9GdJdK�dKe!�Z:GdLdM�dMe�Z;GdNdO�dOe�Z<GdPdQ�dQe�Z=GdRdS�dSe�Z>GdTdU�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�7/usr/local/lib/python3.10/email/_header_value_parser.py�quote_string`s rz�
   =\?            # 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	dd��Zd
d�Ze	dd��Z
e	dd��Zdd�Zddd�Zddd�Zddd�Z�ZS)�	TokenListNTcst�j|i|��g|_dS�N)�super�__init__�defects)�self�args�kw��	__class__rrrys
zTokenList.__init__cC�d�dd�|D��S)N�cs��|]}t|�VqdSr�r
��.0�xrrr�	<genexpr>~��z$TokenList.__str__.<locals>.<genexpr>��join�rrrr�__str__}�zTokenList.__str__c�d�|jjt����S�Nz{}({})��formatr�__name__r�__repr__r)rrrr1�s
�zTokenList.__repr__cCr)Nrcss�|]	}|jr|jVqdSrrr"rrrr%�s�z"TokenList.value.<locals>.<genexpr>r'r)rrrr��zTokenList.valuecCstdd�|D�|j�S)Ncs��|]}|jVqdSr)�all_defectsr"rrrr%���z(TokenList.all_defects.<locals>.<genexpr>)�sumrr)rrrr4�szTokenList.all_defectscCs|d��S�Nr)�startswith_fwsr)rrrr8��zTokenList.startswith_fwscCs	tdd�|D��S)Ncsr3r)�
as_ew_allowed)r#�partrrrr%�r5z*TokenList.as_ew_allowed.<locals>.<genexpr>)�allr)rrrr:�szTokenList.as_ew_allowedcCsg}|D]}|�|j�q|Sr)�extend�comments)rr>�tokenrrrr>�szTokenList.commentscCst||d�S)N��policy)�_refold_parse_tree�rrArrr�fold�r9zTokenList.foldrcCst|j|d��dS)N��indent)�print�ppstr�rrFrrr�pprint�r+zTokenList.pprintcCsd�|j|d��S)N�
rE)r(�_pprIrrrrH�szTokenList.ppstrccs|�d�||jj|j�V|D]}t|d�s|d�|�Vq|�|d�EdHq|jr3d�|j�}nd}d�||�VdS)Nz{}{}/{}(rLz*    !! invalid element in token list: {!r}z    z Defects: {}rz{}){})r/rr0�
token_type�hasattrrLr)rrFr?�extrarrrrL�s ��
�z
TokenList._pp�r)r0�
__module__�__qualname__rM�syntactic_break�ew_combine_allowedrr*r1�propertyrr4r8r:r>rDrJrHrL�
__classcell__rrrrrss(





rc@s$eZdZedd��Zedd��ZdS)�WhiteSpaceTokenListcC�dS�N� rr)rrrr��zWhiteSpaceTokenList.valuecC�dd�|D�S)NcS�g|]
}|jdkr|j�qS)�comment)rM�contentr"rrr�
<listcomp>��z0WhiteSpaceTokenList.comments.<locals>.<listcomp>rr)rrrr>��zWhiteSpaceTokenList.commentsN)r0rQrRrUrr>rrrrrW�s

rWc@�eZdZdZdS)�UnstructuredTokenList�unstructuredN�r0rQrRrMrrrrrd��rdc@rc)�Phrase�phraseNrfrrrrrh�rgrhc@rc)�WordZwordNrfrrrrrj�rgrjc@rc)�CFWSList�cfwsNrfrrrrrk�rgrkc@rc)�Atom�atomNrfrrrrrm�rgrmc@�eZdZdZdZdS)�Tokenr?FN)r0rQrRrMZencode_as_ewrrrrrp��rpc@seZdZdZdZdZdZdS)�EncodedWord�encoded-wordN)r0rQrRrM�cte�charset�langrrrrrr��
rrc@�4eZdZdZedd��Zedd��Zedd��ZdS)	�QuotedString�
quoted-stringcC�"|D]}|jdkr|jSqdS�N�bare-quoted-string�rMr�rr$rrrr_��


��zQuotedString.contentcCs>g}|D]}|jdkr|�t|��q|�|j�qd�|�S)Nr}r)rM�appendr
rr()r�resr$rrr�quoted_value�s

zQuotedString.quoted_valuecCr{r|r~�rr?rrr�stripped_value�r�zQuotedString.stripped_valueN)r0rQrRrMrUr_r�r�rrrrry�s

	ryc@s$eZdZdZdd�Zedd��ZdS)�BareQuotedStringr}cCstd�dd�|D���S)Nrcsr rr!r"rrrr%r&z+BareQuotedString.__str__.<locals>.<genexpr>)rr(r)rrrr*�szBareQuotedString.__str__cCr)Nrcsr rr!r"rrrr%r&z)BareQuotedString.value.<locals>.<genexpr>r'r)rrrrr2zBareQuotedString.valueN)r0rQrRrMr*rUrrrrrr��s
r�c@s8eZdZdZdd�Zdd�Zedd��Zedd	��Zd
S)�Commentr^cs(d�tdg�fdd��D�dggg��S)Nrrcsg|]}��|��qSr)�quoter"r)rrr`sz#Comment.__str__.<locals>.<listcomp>�))r(r6r)rr)rr*s��zComment.__str__cCs2|jdkr	t|�St|��dd��dd��dd�S)Nr^rrrz\(r�z\))rMr
r)rrrrrr�s
���z
Comment.quotecCr)Nrcsr rr!r"rrrr%r&z"Comment.content.<locals>.<genexpr>r'r)rrrr_r2zComment.contentcCs|jgSr)r_r)rrrr>szComment.commentsN)	r0rQrRrMr*r�rUr_r>rrrrr�s
r�c@rx)	�AddressListzaddress-listcCr\)NcS�g|]	}|jdkr|�qS)�address�rMr"rrrr`'�z)AddressList.addresses.<locals>.<listcomp>rr)rrr�	addresses%rbzAddressList.addressescC�tdd�|D�g�S)Ncs� �|]}|jdkr|jVqdS�r�N�rM�	mailboxesr"rrrr%+����z(AddressList.mailboxes.<locals>.<genexpr>�r6r)rrrr�)�
��zAddressList.mailboxescCr�)Ncsr�r��rM�
all_mailboxesr"rrrr%0r�z,AddressList.all_mailboxes.<locals>.<genexpr>r�r)rrrr�.r�zAddressList.all_mailboxesN)r0rQrRrMrUr�r�r�rrrrr�!s

r�c@rx)	�Addressr�cC�|djdkr|djSdS)Nr�group�rM�display_namer)rrrr�8�
�zAddress.display_namecCs4|djdkr|dgS|djdkrgS|djS�Nr�mailbox�invalid-mailboxr�r)rrrr�=s


zAddress.mailboxescCs:|djdkr|dgS|djdkr|dgS|djSr�r�r)rrrr�Es



zAddress.all_mailboxesN)r0rQrRrMrUr�r�r�rrrrr�4s

r�c@�(eZdZdZedd��Zedd��ZdS)�MailboxList�mailbox-listcCr\)NcSr�)r�r�r"rrrr`Sr�z)MailboxList.mailboxes.<locals>.<listcomp>rr)rrrr�QrbzMailboxList.mailboxescCr\)NcSsg|]	}|jdvr|�qS))r�r�r�r"rrrr`Ws
�z-MailboxList.all_mailboxes.<locals>.<listcomp>rr)rrrr�UrbzMailboxList.all_mailboxesN�r0rQrRrMrUr�r�rrrrr�Ms
r�c@r�)�	GroupList�
group-listcC� |r	|djdkrgS|djS�Nrr�r�r)rrrr�_�
zGroupList.mailboxescCr�r�r�r)rrrr�er�zGroupList.all_mailboxesNr�rrrrr�[s
r�c@rx)	�Groupr�cC�|djdkr	gS|djS�N�r�r�r)rrrr�p�
zGroup.mailboxescCr�r�r�r)rrrr�vr�zGroup.all_mailboxescC�
|djSr7)r�r)rrrr�|�
zGroup.display_nameN)r0rQrRrMrUr�r�r�rrrrr�ls

r�c@�LeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�NameAddr�	name-addrcCst|�dkrdS|djS�N�r)�lenr�r)rrrr���
zNameAddr.display_namecCr��N�����
local_partr)rrrr��r�zNameAddr.local_partcCr�r���domainr)rrrr��r�zNameAddr.domaincCr�r�)�router)rrrr��r�zNameAddr.routecCr�r���	addr_specr)rrrr��r�zNameAddr.addr_specN�
r0rQrRrMrUr�r�r�r�r�rrrrr��s



r�c@s@eZdZdZedd��Zedd��Zedd��Zedd	��Zd
S)�	AngleAddrz
angle-addrcCr{�N�	addr-spec)rMr�rrrrr��r�zAngleAddr.local_partcCr{r��rMr�rrrrr��r�zAngleAddr.domaincCr{)N�	obs-route)rM�domainsrrrrr��r�zAngleAddr.routecCs<|D]}|jdkr|jr|jSt|j�|jSqdS)Nr�z<>)rMr�r�rrrrrr��s

�zAngleAddr.addr_specN)	r0rQrRrMrUr�r�r�r�rrrrr��s


r�c@�eZdZdZedd��ZdS)�ObsRouter�cCr\)NcSr]r�r�r"rrrr`�raz$ObsRoute.domains.<locals>.<listcomp>rr)rrrr��rbzObsRoute.domainsN)r0rQrRrMrUr�rrrrr���r�c@r�)
�Mailboxr�cCr��Nrr�r�r)rrrr��r�zMailbox.display_namecCr�r7r�r)rrrr��r�zMailbox.local_partcCr�r7r�r)rrrr��r�zMailbox.domaincCr�r�)rMr�r)rrrr��r�z
Mailbox.routecCr�r7r�r)rrrr��r�zMailbox.addr_specNr�rrrrr��s



r�c@s,eZdZdZedd��ZeZZZZ	dS)�InvalidMailboxr�cC�dSrrr)rrrr��r[zInvalidMailbox.display_nameNr�rrrrr��s

r�cs(eZdZdZdZe�fdd��Z�ZS)�Domainr�Fc�d�t�j���S�Nr�r(rr�splitr)rrrr���z
Domain.domain)r0rQrRrMr:rUr�rVrrrrr��s
r�c@rc)�DotAtom�dot-atomNrfrrrrr��rgr�c@ro)�DotAtomTextz
dot-atom-textTN�r0rQrRrMr:rrrrr��rqr�c@ro)�
NoFoldLiteralzno-fold-literalFNr�rrrrr�rqr�c@sDeZdZdZdZedd��Zedd��Zedd��Zed	d
��Z	dS)�AddrSpecr�FcCr�r7r�r)rrrr�
r�zAddrSpec.local_partcCst|�dkrdS|djS)N�r�)r�r�r)rrrr�r�zAddrSpec.domaincCs<t|�dkr|djS|dj��|dj|dj��S)Nr�rr�r�)r�r�rstrip�lstripr)rrrrs
&zAddrSpec.valuecCsLt|j�}t|�t|t�krt|j�}n|j}|jdur$|d|jS|S)N�@)�setr�r��
DOT_ATOM_ENDSrr�)rZnamesetZlprrrr�s

zAddrSpec.addr_specN)
r0rQrRrMr:rUr�r�rr�rrrrr�s


r�c@ro)�ObsLocalPartzobs-local-partFNr�rrrrr�&�r�cs4eZdZdZdZedd��Ze�fdd��Z�ZS)�DisplayNamezdisplay-nameFcCs�t|�}t|�dkr
|jS|djdkr|�d�n|ddjdkr/t|ddd��|d<|djdkr=|��|jS|ddjdkrRt|ddd��|d<|jS)Nrrlr�r�)rr�rrM�pop)rr�rrrr�1s�zDisplayName.display_namecs�d}|jrd}n|D]	}|jdkrd}q
t|�dkrM|rMd}}|djdks0|ddjdkr2d}|djdksB|ddjdkrDd}|t|j�|St�jS)	NFTrzrrrlrZr�)rrMr�rr�rr)rr�r$�preZpostrrrrBs
�  zDisplayName.value)	r0rQrRrMrTrUr�rrVrrrrr�,s
r�c@s,eZdZdZdZedd��Zedd��ZdS)�	LocalPartz
local-partFcCs"|djdkr|djS|djS)Nrrz)rMr�rr)rrrr[s

zLocalPart.valuecCs�tg}t}d}|dtgD]J}|jdkrq|r.|jdkr.|djdkr.t|dd��|d<t|t�}|rM|jdkrM|djdkrM|�t|dd���n|�|�|d}|}qt|dd��}|jS)NFrrl�dotr�r�)�DOTrMr�
isinstancer�r)rr�ZlastZ
last_is_tl�tokZis_tlrrrr�bs$


zLocalPart.local_partN)r0rQrRrMr:rUrr�rrrrr�Vs
r�cs4eZdZdZdZe�fdd��Zedd��Z�ZS)�
DomainLiteralzdomain-literalFcr�r�r�r)rrrr�r�zDomainLiteral.domaincCr{)N�ptextr~rrrr�ip�r�zDomainLiteral.ip)	r0rQrRrMr:rUr�r�rVrrrrr�zsr�c@seZdZdZdZdZdS)�MIMEVersionzmime-versionN)r0rQrRrM�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|jdkr0|D]}|jdkr/|D]}|jdkr.|jSqqqdS)Nrrzr}r)rMr�r�rrr�param_value�s




��zParameter.param_valueN)
r0rQrRrMr��extendedrurUr�r�rrrrr��s
r�c@rc)�InvalidParameter�invalid-parameterNrfrrrrr��sr�c@r�)�	Attribute�	attributecCs$|D]
}|j�d�r|jSqdS)N�attrtext)rM�endswithrr�rrrr��s

��zAttribute.stripped_valueN�r0rQrRrMrUr�rrrrr��r�r�c@seZdZdZdZdS)�Section�sectionN)r0rQrRrMr�rrrrr�r�rc@r�)�ValuercCs2|d}|jdkr
|d}|j�d�r|jS|jS)Nrrlr�)rzr�zextended-attribute)rMrr�rr�rrrr��s
�zValue.stripped_valueNrrrrrr�r�rc@s(eZdZdZdZedd��Zdd�ZdS)�MimeParameters�mime-parametersFccs��i}|D]*}|j�d�sq|djdkrq|dj��}||vr%g||<||�|j|f�q|��D]�\}}t|td�d�}|dd}|j	}|j
smt|�dkrm|dddkrm|ddj�t
�d��|dd�}g}d}|D]n\}	}
|	|kr�|
j
s�|
j�t
�d��qs|
j�t
�d��|d7}|
j}|
j
r�ztj�|�}Wnty�tjj|d	d
�}Yn(wz|�|d�}Wnttfy�|�dd�}Ynwt�|�r�|
j�t
���|�|�qsd
�|�}||fVq4dS)Nr�rr�)�keyr�z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)�encoding�surrogateescaper�r)rMrr�stripr�r��items�sortedrrur�r�rr�InvalidHeaderDefectr��urllib�parse�unquote_to_bytes�UnicodeEncodeError�unquote�decode�LookupErrorr�_has_surrogates�UndecodableBytesDefectr()r�paramsr?�name�partsZfirst_paramruZvalue_parts�ir��paramrrrrr�sh��
�
���

�zMimeParameters.paramscCsTg}|jD]\}}|r|�d�|t|���q|�|�qd�|�}|r(d|SdS)N�{}={}z; rZr)rr�r/rr()rrrrrrrr*s
zMimeParameters.__str__N)r0rQrRrMrSrUrr*rrrrr�s
Erc@r�)�ParameterizedHeaderValueFcCs&t|�D]}|jdkr|jSqiS)Nr)�reversedrMrr�rrrr-s


�zParameterizedHeaderValue.paramsN)r0rQrRrSrUrrrrrr'src@seZdZdZdZdZdZdS)�ContentTypezcontent-typeF�textZplainN)r0rQrRrMr:�maintype�subtyperrrrr5rwrc@seZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r0rQrRrMr:�content_dispositionrrrrr#<�r#c@seZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r0rQrRrMr:rtrrrrr&Br%r&c@ro)�HeaderLabelzheader-labelFNr�rrrrr'Hrqr'c@seZdZdZdZdd�ZdS)�MsgIDzmsg-idFcCst|�|jSr)r
�lineseprCrrrrDQrbz
MsgID.foldN)r0rQrRrMr:rDrrrrr(Msr(c@rc)�	MessageIDz
message-idNrfrrrrr*Vrgr*c@rc)�InvalidMessageIDzinvalid-message-idNrfrrrrr+Zrgr+c@rc)�Header�headerNrfrrrrr,^rgr,csreZdZdZdZdZ�fdd�Z�fdd�Zdd�Ze	dd	��Z
d�fdd�	Zd
d�Ze	dd��Z
dd�Z�ZS)�TerminalTcst��||�}||_g|_|Sr)r�__new__rMr)�clsrrMrrrrr/lszTerminal.__new__cr,r-r.r)rrrr1rszTerminal.__repr__cCst|jjd|j�dS)N�/)rGrr0rMr)rrrrJuszTerminal.pprintcCs
t|j�Sr)�listrr)rrrr4xr�zTerminal.all_defectsrc	s6d�||jj|jt���|jsd�gSd�|j��gS)Nz
{}{}/{}({}){}rz {})r/rr0rMrr1rrIrrrrL|s�
�zTerminal._ppcCr�rrr)rrr�pop_trailing_ws�r[zTerminal.pop_trailing_wscCsgSrrr)rrrr>�r[zTerminal.commentscCst|�|jfSr)r
rMr)rrr�__getnewargs__�szTerminal.__getnewargs__rP)r0rQrRr:rTrSr/r1rJrUr4rLr3r>r4rVrrrrr.fs
	
r.c@� eZdZedd��Zdd�ZdS)�WhiteSpaceTerminalcCrXrYrr)rrrr�r[zWhiteSpaceTerminal.valuecCrX)NTrr)rrrr8��z!WhiteSpaceTerminal.startswith_fwsN�r0rQrRrUrr8rrrrr6��
r6c@r5)�
ValueTerminalcCs|Srrr)rrrr�r[zValueTerminal.valuecCrX)NFrr)rrrr8�r7zValueTerminal.startswith_fwsNr8rrrrr:�r9r:c@r5)�EWWhiteSpaceTerminalcCrXr�rr)rrrr�r[zEWWhiteSpaceTerminal.valuecCrXr�rr)rrrr*�r7zEWWhiteSpaceTerminal.__str__N)r0rQrRrUrr*rrrrr;�r9r;c@seZdZdS)�_InvalidEwErrorN)r0rQrRrrrrr<�sr<r��,�list-separatorr�zroute-component-markerz([{}]+)rz[^{}]+z[\x00-\x20\x7F]cCsD	t|�}|r|j�t�|��t�|�r |j�t�d��dSdS)Nz*Non-ASCII characters found in header token)�_non_printable_finderrr�rZNonPrintableDefectrrr)�xtextZnon_printablesrrr�_validate_xtext�s


��rAcCs�	t|d�^}}g}d}d}tt|��D]&}||dkr&|r#d}d}nd}q|r+d}n|||vr3n|�||�q|d}d�|�d�||d�g|�|fS)Nr�FrTr)�
_wsp_splitter�ranger�r�r()r�endchars�fragment�	remainderZvchars�escape�had_qp�posrrr�_get_ptext_to_endchars�s&$rJcCs0	|��}t|dt|�t|��d�}||fS)N�fws)r�r6r�)rZnewvaluerKrrr�get_fwssrLc
	Cs�	t�}|�d�st�d�|���|dd��dd�^}}||dd�kr-t�d�|���d�|�}t|�dkrY|dtvrY|dtvrY|�	d�dkrY|�dd�^}}|d|}t|���dkrj|j
�t�d	��||_
d�|�}zt�d|d�\}}}}	Wnttfy�td
�|j
���w||_||_|j
�|	�|r�|dtvr�t|�\}
}|�|
�q�t|d�^}}t|d�}t|�|�|�d�|�}|s�|r�|dtvr�|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)rr�
startswithr�HeaderParseErrorr/r�r(r�r�countrr�r
rt�_ewr�
ValueError�KeyErrorr<rurvr=�WSPrLrBr:rA)
rZewr�rFZremstr�restr rurvrr?�charsrOrrr�get_encoded_wordsd
��

�

��



�
�rYcCs@	t�}|r�|dtvrt|�\}}|�|�qd}|�d�rtzt|�\}}Wnty2d}YnBtjy;Yn9wd}t	|�dkrV|dj
dkrV|j�t�d��d}|rnt	|�dkrn|d	j
d
krnt
|dd�|d<|�|�qt|d�^}}|r�t�|�r�|�d�^}}t|d�}t|�|�|�d�|�}|s|S)
NrTrMFr�rKz&missing whitespace before encoded wordr����rsrOr)rdrVrLr�rPrYr<rrQr�rMrr
r;rB�rfc2047_matcher�search�	partitionr:rAr()rrer?�valid_ewZhave_wsr�rFrOrrr�get_unstructured?sN

�
��



�)r_cC�,	t|d�\}}}t|d�}t|�||fS)Nz()r�)rJr6rA�rr��_rrr�get_qp_ctext�s

rccCr`)Nr
r�)rJr:rArarrr�get_qcontent�s
	
rdcC�P	t|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)Nzexpected atext but found '{}'�atext)�_non_atom_end_matcherrrQr/r�r�r:rA)r�mrfrrr�	get_atext�s�
ricCsp	|ddkrt�d�|���t�}|dd�}|r+|ddkr+t|�\}}|�|�|r�|ddkr�|dtvr@t|�\}}nT|dd�dkr�d}zt|�\}}|j	�t�
d��d	}Wntjymt|�\}}Ynw|r�t|�dkr�|d
jdkr�|djd
kr�t
|d
d�|d
<nt|�\}}|�|�|r�|ddks3|s�|j	�t�
d��||fS||dd�fS)Nrr
zexpected '"' but found '{}'r�r�rMFz!encoded word inside quoted stringTr�rKrZrsz"end of header inside quoted string)rrQr/r�rdr�rVrLrYrr
r�rMr;)rZbare_quoted_stringr?r^rrr�get_bare_quoted_string�sP�

����
�
�rjcCs�	|r|ddkrt�d�|���t�}|dd�}|rO|ddkrO|dtvr/t|�\}}n|ddkr<t|�\}}nt|�\}}|�|�|rO|ddks"|s^|j	�t�
d��||fS||dd�fS)Nrrzexpected '(' but found '{}'r�r�zend of header inside comment)rrQr/r�rVrL�get_commentrcr�rr
)rr^r?rrrrk�s*�
�
�rkcCs`	t�}|r,|dtvr,|dtvrt|�\}}nt|�\}}|�|�|r,|dtvs||fSr7)rk�CFWS_LEADERrVrLrkr�)rrlr?rrr�get_cfws�s
�rmcCsr	t�}|r|dtvrt|�\}}|�|�t|�\}}|�|�|r5|dtvr5t|�\}}|�|�||fSr7)ryrlrmr�rj)rZ
quoted_stringr?rrr�get_quoted_strings


rncCs�	t�}|r|dtvrt|�\}}|�|�|r'|dtvr't�d�|���|�d�rEzt	|�\}}WntjyDt
|�\}}Ynwt
|�\}}|�|�|rc|dtvrct|�\}}|�|�||fS)Nrzexpected atom but found '{}'rM)rmrlrmr��	ATOM_ENDSrrQr/rPrYri)rrnr?rrr�get_atoms*
�
�

rpcCs�	t�}|r|dtvrt�d�|���|rB|dtvrBt|�\}}|�|�|r:|ddkr:|�t�|dd�}|rB|dtvs|dturRt�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�rorrQr/rir�r�)rZ
dot_atom_textr?rrr�get_dot_atom_text0s$�

�
�rqcCs�	t�}|dtvrt|�\}}|�|�|�d�r3zt|�\}}Wntjy2t|�\}}Ynwt|�\}}|�|�|rQ|dtvrQt|�\}}|�|�||fS)NrrM)	r�rlrmr�rPrYrrQrq)rZdot_atomr?rrr�get_dot_atomCs"

�

rrcCs�	|dtvrt|�\}}nd}|st�d��|ddkr$t|�\}}n|dtvr2t�d�|���t|�\}}|durC|g|dd�<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.r
z1Expected 'atom' or 'quoted-string' but found '{}')rlrmrrQrn�SPECIALSr/rp)r�leaderr?rrr�get_word\s$��rucCs	t�}z
t|�\}}|�|�Wntjy$|j�t�d��Ynw|r|dtvr|ddkrH|�t�|j�t�	d��|dd�}n/zt|�\}}Wn!tjyq|dt
vrnt|�\}}|j�t�	d��n�Ynw|�|�|r|dtvs-||fS)Nzphrase does not start with wordrrzperiod in 'phrase'r�zcomment found without atom)rhrur�rrQrr
�PHRASE_ENDSr��ObsoleteHeaderDefectrlrm)rrir?rrr�
get_phrase~s>

��

�
���
�rxcCsn	t�}d}|dtvrt|�\}}|st�d�|���zt|�\}}Wn-tjyQzt|�\}}WntjyN|ddkrI|dtvrI�t	�}YnwYnw|dur]|g|dd�<|�
|�|r�|ddksp|dtvr�tt|�|�\}}|j
dkr�|j�
t�d��n	|j�
t�d��||d<z|j�d�W||fSty�|j�
t�d��Y||fSw)	Nrz"expected local-part but found '{}'r�invalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)�asciiz)local-part contains non-ASCII characters))r�rlrmrrQr/rrrurvrr��get_obs_local_partr
rMrr
rwr�encoderZNonASCIILocalPartDefect)rr�rtr?�obs_local_partrrr�get_local_part�sV�
���


�
��
��r~cCs�	t�}d}|r�|ddks|dtvr�|ddkr3|r%|j�t�d��|�t�d}|dd�}q|ddkrU|�t|dd��|dd�}|j�t�d	��d}q|rg|d
jdkrg|j�t�d��z
t	|�\}}d}Wntj
y�|dtvr��t|�\}}Ynw|�|�|r�|ddks|dtvs|djdks�|djd
kr�|djdkr�|j�t�d��|d
jdks�|d
jd
kr�|djdkr�|j�t�d��|jr�d|_||fS)NFrrrzinvalid repeated '.'Tr��misplaced-specialz/'\' character outside of quoted-string/ccontentr�r�zmissing '.' between wordsrlz!Invalid leading '.' in local partrZz"Invalid trailing '.' in local partry)
r�rvrr�rr
r�r:rMrurQrlrm)rr}Zlast_non_ws_was_dotr?rrrr{�sh
�
�
�
��
�
�
�r{cCsB	t|d�\}}}t|d�}|r|j�t�d��t|�||fS)Nz[]r�z(quoted printable found in domain-literal)rJr:rr�rrwrA)rr�rHrrr�	get_dtext�s

�r�cCs,|rdS|�t�d��|�tdd��dS)NFz"end of input inside domain-literal�]�domain-literal-endT)r�rr
r:)r�domain_literalrrr�_check_for_early_dl_ends�r�cCsf	t�}|dtvrt|�\}}|�|�|st�d��|ddkr*t�d�|���|dd�}t||�r9||fS|�tdd��|dt	vrRt
|�\}}|�|�t|�\}}|�|�t||�rf||fS|dt	vrwt
|�\}}|�|�t||�r�||fS|ddkr�t�d�|���|�tdd	��|dd�}|r�|dtvr�t|�\}}|�|�||fS)
Nrzexpected domain-literal�[z6expected '[' at start of domain-literal but found '{}'r�zdomain-literal-startr�z4expected ']' at end of domain-literal but found '{}'r�)r�rlrmr�rrQr/r�r:rVrLr�)rr�r?rrr�get_domain_literalsJ

�





�
r�cCst	t�}d}|dtvrt|�\}}|st�d�|���|ddkr<t|�\}}|dur3|g|dd�<|�|�||fSzt|�\}}WntjyTt	|�\}}Ynw|rb|ddkrbt�d��|durm|g|dd�<|�|�|r�|ddkr�|j
�t�d��|djdkr�|d|dd�<|r�|ddkr�|�t
�t	|d	d��\}}|�|�|r�|ddks�||fS)
Nrzexpected domain but found '{}'r�r�zInvalid Domainrz(domain is not a dot-atom (contains CFWS)r�r�)r�rlrmrrQr/r�r�rrrprrwrMr�)rr�rtr?rrr�
get_domain=sJ�
�


�

�r�cCs~	t�}t|�\}}|�|�|r|ddkr$|j�t�d��||fS|�tdd��t|dd��\}}|�|�||fS)Nrr�z#addr-spec local part with no domain�address-at-symbolr�)r�r~r�rrr
r:r�)rr�r?rrr�
get_addr_speccs

�
r�cCs�	t�}|rC|ddks|dtvrC|dtvr$t|�\}}|�|�n|ddkr5|�t�|dd�}|rC|ddks|dtvs|rK|ddkrSt�d�|���|�t�t	|dd��\}}|�|�|r�|ddkr�|�t�|dd�}|s}n3|dtvr�t|�\}}|�|�|ddkr�|�t�t	|dd��\}}|�|�|r�|ddkso|s�t�d��|ddkr�t�d�|���|�t
dd	��||dd�fS)
Nrr=r�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�rlrmr��
ListSeparatorrrQr/�RouteComponentMarkerr�r:)rZ	obs_router?rrr�
get_obs_routessL
��





�
�r�cCs�	t�}|dtvrt|�\}}|�|�|r|ddkr%t�d�|���|�tdd��|dd�}|ddkrT|�tdd��|j�t�	d��|dd�}||fSzt
|�\}}Wn7tjy�zt|�\}}|j�t�d	��Wntjy�t�d
�|���w|�|�t
|�\}}Ynw|�|�|r�|ddkr�|dd�}n	|j�t�	d��|�tdd��|r�|dtvr�t|�\}}|�|�||fS)Nr�<z"expected angle-addr but found '{}'zangle-addr-startr��>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�rlrmr�rrQr/r:rr
r�r�rw)rZ
angle_addrr?rrr�get_angle_addr�sZ
�
�

���
�


�
r�cCs>	t�}t|�\}}|�|dd��|jdd�|_||fSr)r�rxr=r)rr�r?rrr�get_display_name�sr�cCs�	t�}d}|dtvrt|�\}}|st�d�|���|ddkrT|dtvr0t�d�|���t|�\}}|s@t�d�|���|durO|g|ddd�<d}|�|�t	|�\}}|dure|g|dd�<|�|�||fS)Nrz!expected name-addr but found '{}'r�)
r�rlrmrrQr/rvr�r�r�)rZ	name_addrrtr?rrr�
get_name_addr�s8���

r�cCs�	t�}zt|�\}}Wn#tjy/zt|�\}}Wntjy,t�d�|���wYnwtdd�|jD��r=d|_|�	|�||fS)Nzexpected mailbox but found '{}'cs��|]	}t|tj�VqdSr)r�rr
r"rrrr%���zget_mailbox.<locals>.<genexpr>r�)
r�r�rrQr�r/�anyr4rMr�)rr�r?rrr�get_mailbox�s(�����
r�cCst	t�}|r6|d|vr6|dtvr#|�t|dd��|dd�}nt|�\}}|�|�|r6|d|vs||fS)Nrrr�)r�rvr�r:rx)rrDZinvalid_mailboxr?rrr�get_invalid_mailbox��
�r�cCs�	t�}|r�|ddkr�z
t|�\}}|�|�Wn�tjy�d}|dtvrgt|�\}}|r7|ddvrF|�|�|j�t�d��nQt	|d�\}}|durX|g|dd�<|�|�|j�t�
d��n0|ddkrw|j�t�d��n t	|d�\}}|dur�|g|dd�<|�|�|j�t�
d��Ynw|r�|ddvr�|d}d|_t	|d�\}}|�|�|j�t�
d��|r�|ddkr�|�t
�|d	d�}|r�|ddks||fS)
Nr�;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr=r�r�r�)r�r�r�rrQrlrmrrwr�r
rMr=r�)rZmailbox_listr?rtr�rrr�get_mailbox_lists`

�

�
�

���

�
�)r�cCs	t�}|s|j�t�d��||fSd}|rF|dtvrFt|�\}}|s7|j�t�d��|�|�||fS|ddkrF|�|�||fSt|�\}}t|j	�dkrn|dur\|�|�|�
|�|j�t�d��||fS|dury|g|dd�<|�|�||fS)Nzend of header before group-listrzend of header in group-listr�zgroup-list with empty entries)r�rr�rr
rlrmr�r�r�r=rw)rZ
group_listrtr?rrr�get_group_listWs@
�
�




�
r�cCs	t�}t|�\}}|r|ddkrt�d�|���|�|�|�tdd��|dd�}|rE|ddkrE|�tdd��||dd�fSt|�\}}|�|�|s\|j�t�	d��n|ddkrjt�d	�|���|�tdd��|dd�}|r�|dt
vr�t|�\}}|�|�||fS)
Nrr�z8expected ':' 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�r�rrQr/r�r:r�rr
rlrm)rr�r?rrr�	get_group|s:�


��
r�cCsr	t�}zt|�\}}Wn#tjy/zt|�\}}Wntjy,t�d�|���wYnw|�|�||fS)Nzexpected address but found '{}')r�r�rrQr�r/r�)rr�r?rrr�get_address�s ����
r�c
Cs�	t�}|r�z
t|�\}}|�|�Wn�tjy�}z�d}|dtvret|�\}}|r2|ddkrA|�|�|j�t�d��nWt	|d�\}}|durS|g|dd�<|�t
|g��|j�t�d��n3|ddkru|j�t�d��n#t	|d�\}}|dur�|g|dd�<|�t
|g��|j�t�d��WYd}~nd}~ww|r�|ddkr�|dd}d|_t	|d�\}}|�
|�|j�t�d��|r�|�tdd��|d	d�}|s||fS)
Nrr=z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr�r�r>r�)r�r�r�rrQrlrmrrwr�r�r
rMr=r:)rZaddress_listr?�errrtr�rrr�get_address_list�s`	

�
�
�
���

��)r�cCs�	t�}|st�d�|���|ddkrt�d�|���|�tdd��|dd�}t|�\}}|�|�|r=|ddkrEt�d�|���|�tdd	��||dd�fS)
Nz'expected no-fold-literal but found '{}'rr�z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr�r�z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r�rrQr/r�r:r�)rZno_fold_literalr?rrr�get_no_fold_literal�s,��
�r�cCsr	t�}|r|dtvrt|�\}}|�|�|r|ddkr't�d�|���|�tdd��|dd�}zt|�\}}Wn,tjyizt	|�\}}|j
�t�d��Wntjyft�d�|���wYnw|�|�|rw|ddkr�|j
�t�d	��|r�|dd
kr�|�td
d��|dd�}||fS|�tdd��|dd�}zt|�\}}WnHtjy�zt
|�\}}Wn5tjy�}z(zt|�\}}|j
�t�d
��Wntjy�t�d�|���wWYd}~nd}~wwYnw|�|�|�r|dd
k�r|dd�}n	|j
�t�d��|�td
d��|�r5|dtv�r5t|�\}}|�|�||fS)Nrr�zexpected 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-rightr�z
msg-id-endr�zobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r(rlrmr�rrQr/r:rqr{rrwr
r�r�)rZmsg_idr?�errr�
get_msg_ids�
�

�����


�

��������

�
r�c
Cs�	t�}z
t|�\}}|�|�Wn(tjy9}zt|�}t|�}|j�t�d�	|���WYd}~|Sd}~ww|rH|j�t�d�	|���|S)NzInvalid msg-id: {!r}zUnexpected {!r})
r*r�r�rrQr_r+rr
r/)rZ
message_idr?�exrrr�parse_message_idIs&���
�r�cCs�	t�}|s|j�t�d��|S|dtvr-t|�\}}|�|�|s-|j�t�d��d}|rW|ddkrW|dtvrW||d7}|dd�}|rW|ddkrW|dtvs=|��sp|j�t�d�	|���|�t
|d��n
t|�|_|�t
|d	��|r�|dtvr�t|�\}}|�|�|r�|ddkr�|jdur�|j�t�d
��|r�|�t
|d��|S|�t
dd��|dd�}|r�|dtvr�t|�\}}|�|�|s�|jdur�|j�t�d
��|Sd}|�r|dtv�r||d7}|dd�}|�r|dtvs�|���s |j�t�d�	|���|�t
|d��n
t|�|_
|�t
|d	��|�rB|dtv�rBt|�\}}|�|�|�rV|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�rr�r�HeaderMissingRequiredValuerlrm�isdigitr
r/r:�intr�r�)rZmime_versionr?r�rrr�parse_mime_versiones�
�

��
�



�


��

�


�r�cCst	t�}|r6|ddkr6|dtvr#|�t|dd��|dd�}nt|�\}}|�|�|r6|ddks||fS)Nrr�rr�)r�rvr�r:rx)rZinvalid_parameterr?rrr�get_invalid_parameter�r�r�cCre)Nzexpected ttext but found '{}'�ttext)�_non_token_end_matcherrrQr/r�r�r:rA)rrhr�rrr�	get_ttext���
r�cC�	t�}|r|dtvrt|�\}}|�|�|r'|dtvr't�d�|���t|�\}}|�|�|rE|dtvrEt|�\}}|�|�||fS�Nrzexpected token but found '{}')	rprlrmr��
TOKEN_ENDSrrQr/r�)rZmtokenr?rrr�	get_token��
�

r�cCre)Nz expected attrtext but found {!r}r�)�_non_attribute_end_matcherrrQr/r�r�r:rA�rrhr�rrr�get_attrtext�r�r�cCr�r�)	r�rlrmr��ATTRIBUTE_ENDSrrQr/r��rr�r?rrr�
get_attribute�r�r�cCre)Nz)expected extended attrtext but found {!r}�extended-attrtext)�#_non_extended_attribute_end_matcherrrQr/r�r�r:rAr�rrr�get_extended_attrtext	s�
r�cCr�r�)	r�rlrmr��EXTENDED_ATTRIBUTE_ENDSrrQr/r�r�rrr�get_extended_attribute!	s
�

r�cCs�	t�}|r|ddkrt�d�|���|�tdd��|dd�}|r*|d��s2t�d�|���d}|rP|d��rP||d7}|dd�}|rP|d��s<|ddkrc|dkrc|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 0r�)rrrQr/r�r:r�rr
r�r�)rrr�rrr�get_section7	s0���
�
r�cCs�	t�}|st�d��d}|dtvrt|�\}}|s#t�d�|���|ddkr0t|�\}}nt|�\}}|durA|g|dd�<|�|�||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r
)	rrrQrlrmr/rnr�r�)r�vrtr?rrr�	get_valueU	s$
�
r�cCsz	t�}t|�\}}|�|�|r|ddkr'|j�t�d�|���||fS|ddkrfzt|�\}}d|_|�|�Wn
tj	yGYnw|sOt�	d��|ddkrf|�t
dd��|dd�}d|_|dd	krqt�	d
��|�t
d	d��|dd�}d}|r�|dtvr�t
|�\}}|�|�d}|}|j�r|�r|ddk�rt|�\}}|j}d
}|jdkr�|r�|ddkr�d}n#t|�\}}	|	r�|	ddkr�d}nzt|�\}}	WnYn|	s�d}|�r
|j�t�d��|�|�|D]}
|
jdk�r	g|
dd�<|
}nq�|}nd}|j�t�d��|�r%|ddk�r%d}nt|�\}}|j�r5|jdk�rX|�r?|ddk�rO|�|�|du�rK|}||fS|j�t�d��|�ss|j�t�d��|�|�|du�rr||fSnw|du�r�|D]}
|
jdk�r�n�qz|
jdk|�|
�|
j|_|ddk�r�t�	d�|���|�t
dd��|dd�}|�r�|ddk�r�t|�\}}|�|�|j|_|�r�|ddk�r�t�	d�|���|�t
dd��|dd�}|du�r't�}|�r$|dtv�rt|�\}}n|ddk�rt
dd�}|dd�}nt|�\}}|�|�|�s�|}nt|�\}}|�|�|du�r9|}||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 invalidr}zZParameter 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 delimitersr�r�z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)r�r�r�rrr
r/r�r�rQr:r�rlrmrnr�r�r�r�rMr�rrurvrrVrLrd)rrr?rtrFZappendtoZqstringZinner_valueZ
semi_validrW�tr�rrr�
get_parameterk	s�

��



�
�
�
�


�
�

�
�

�
�


�	

r�c
Csn	t�}|r�z
t|�\}}|�|�Wnitjy|}z\d}|dtvr*t|�\}}|s9|�|�|WYd}~S|ddkrR|durH|�|�|j�t�d��n t	|�\}}|ra|g|dd�<|�|�|j�t�d�
|���WYd}~nd}~ww|r�|ddkr�|d}d|_t	|�\}}|�|�|j�t�d�
|���|r�|�t
dd��|d	d�}|s|S)
Nrr�zparameter entry with no contentzinvalid parameter {!r}r�r�z)parameter with invalid trailing text {!r}r�r�)rr�r�rrQrlrmrr
r�r/rMr=r:)rZmime_parametersr?r�rtrrrr�parse_mime_parameters�	sR


�

���

��$r�cCs�	|r3|ddkr3|dtvr |�t|dd��|dd�}nt|�\}}|�|�|r3|ddks	|s7dS|�tdd��|�t|dd���dS)Nrr�rr�r�)rvr�r:rxr�)Z	tokenlistrr?rrr�_find_mime_parameters-
s
�r�c
Cs�	t�}d}|s|j�t�d��|Szt|�\}}Wntjy8|j�t�d�|���t	||�|YSw|�|�|rF|ddkrX|j�t�d��|rVt	||�|S|j
����|_
|�tdd��|dd�}zt|�\}}Wntjy�|j�t�d	�|���t	||�|YSw|�|�|j
����|_|s�|S|dd
kr�|j�t�d�|���|`
|`t	||�|S|�td
d��|�t|dd���|S)
NFz"Missing content type specificationz(Expected content maintype but found {!r}rr1zInvalid content typezcontent-type-separatorr�z'Expected content subtype but found {!r}r�z<Only parameters are valid after content type, but found {!r}r�)rrr�rr�r�rQr
r/r�rr
�lowerr!r:r"r�)rZctypeZrecoverr?rrr�parse_content_type_header=
sh
�
�
�

�

�
�

�
r�c
Cs�	t�}|s|j�t�d��|Szt|�\}}Wntjy6|j�t�d�|���t	||�|YSw|�|�|j
����|_
|sH|S|ddkra|j�t�d�|���t	||�|S|�tdd��|�t|dd���|S)NzMissing content dispositionz+Expected content disposition but found {!r}rr�zCOnly parameters are valid after content disposition, but found {!r}r�r�)r#rr�rr�r�rQr
r/r�rr
r�r$r:r�)rZdisp_headerr?rrr� parse_content_disposition_headerv
s<
�
�
�

�
r�c
Cs�	t�}|s|j�t�d��|Szt|�\}}Wntjy/|j�t�d�|���Ynw|�|�|j	�
���|_|sA|S|rp|j�t�d��|dt
vrc|�t|dd��|dd�}nt|�\}}|�|�|sC|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrrr�)r&rr�rr�r�rQr
r/rr
r�rtrvr:rx)rZ
cte_headerr?rrr�&parse_content_transfer_encoding_header�
s:
�

��

�
�	r�cCsDd}|r |dr |ddtvr |dd}|ddd�|d<|S)Nrr�)rV)�linesZwsprrr�_steal_trailing_WSP_if_exists�
s
r�cCs�	|jptj}|jrdnd}dg}d}d}d}tdd�}t|�}	|	�rI|	�d�}
|
|ur1|d8}q t|
�}|
jdkrBt	|�t
@rBd	}z	|�|�|}Wntyet
d
d�|
jD��r_d}nd}d	}Ynw|
jd
krst|
|||�q |r�|s�|
js�d}d}|
jr�|
j|d�dt|j��}
|j|
vr�t|
�|t|d�kr�t|�}|�|�|d|
7<q t|
d�s�t|
�|	}	n
t|||||
j|�}d}q t|�|t|d�kr�|d|7<q |
jr�t|�d|kr�t|�}|s�|
��r�|�||�d}q t|
d��st|
�}|
j�s|d7}|�|�||	}	q |
j�r+|�s+|	�d|
�d	}q t|�}|�s7|
���r?|�||�n|d|7<|	s#|j�|�|jS)N�utf-8r�rrF�wrap_as_ew_blockedr�r�Tcsr�r)r�rrr"rrrr%�
r�z%_refold_parse_tree.<locals>.<genexpr>�unknown-8bitrr@r�r|)Zmax_line_length�sys�maxsize�utf8r.r2r�r
rMr�rsr|rr�r4�_fold_mime_parametersr:rSrDr�r)r�r�rN�_fold_as_ewrTr8�insertr()Z
parse_treerA�maxlenrr��last_ewr�Z
want_encodingZend_ew_not_allowedrr;�tstrruZencoded_part�newlineZnewpartsrrrrB�
s�


��
	



�
�XrBcCs�	|dur|rtt|d|d�|��}|dd|�|d<|dtvrF|d}|dd�}t|d�|kr>|�t|��|d|7<d}|dtvrX|d}|dd�}|durbt|d�n|}|dkrjdn|}	t|	�d}
|
d|kr}t�d��|r�|t|d�}||
}|dkr�|�d	�q}|d|�}
tj	|
|	d
�}t|�|}|dkr�|
dd�}
tj	|
|	d
�}t|�|}|dks�|d|7<|t|
�d�}|r�|�d	�t|d�}|s|d|7<|r�|SdS)Nr�rr�rr�r��z3max_line_length is too small to fit an encoded wordrZ)ru)
r
r_rVr�r�r�rrQrSr|)Z	to_encoder�r�r�rTruZleading_wspZtrailing_wspZnew_last_ewZ	encode_as�
chrome_lenZremaining_spaceZ
text_spaceZto_encode_wordZencoded_wordZexcessrrrr�1sZ
��
�
�r�c	Cs�	|jD]�\}}|d���d�s|dd7<|}d}z	|�|�d}Wnty=d}t�|�r9d}d}nd}Ynw|rQtjj	|d	|d
�}	d�
|||	�}
nd�
|t|��}
t|d�t|
�d
|krr|dd|
|d<qt|
�d|kr�|�
d|
�qd}|d}|r�t|�tt|��dt|�}
||
dkr�d}||
d}}	|d|�}tjj	|d	|d
�}	t|	�|kr�n|d
8}q�|�
d�
||||	��d	}|d
7}||d�}|r�|dd7<|s�qdS)Nr�r��strictFTr�r	r�r)�saferz
{}*={}''{}rr�rZr�rz''r��Nz {}*{}*={}{})rr�rr|rrrrrr�r/rr�r�r
)r;r�r�rrrruZ
error_handlerZencoding_requiredZ
encoded_valuer�rZextra_chromer�Z
splitpointZmaxchars�partialrrrr�rsp

��� ������r�)��rer�r�stringr�operatorrZemailrrSrrr�rVrlrsror�rvZ	TSPECIALSr�Z	ASPECIALSr�r�r�compile�VERBOSE�	MULTILINEr[r2rrWrdrhrjrkrmrprrryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr#r&r'r(r*r+r,r
r.r6r:r;rQr<r�r�r�r/r(r�rBrG�matchrg�findallr?r�r�r�rArJrLrYr_rcrdrirjrkrmrnrprqrrrurxr~r{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rBr�r�rrrr�<module>s@E
�C"	
!*$
V	+





��������
1C+
"&'/'&).9%7ED49/gA