HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/Python311/Lib/email/__pycache__/_header_value_parser.cpython-311.opt-2.pyc
�

��Vc���	���	ddlZddlZddlZddlmZddlmZddlmZ	ddlm
Z
ddlmZed��Z
e
ed��zZed	��Zee
zZeed
��z
Zeed��z
Zeed��zed
��z
Zee
zZeed
��zZee
zZeed��z
Zd�Zejdejejz��ZGd�de��ZGd�de��ZGd�de��Z Gd�de��Z!Gd�de��Z"Gd�de��Z#Gd�de��Z$Gd�d e��Z%Gd!�d"e��Z&Gd#�d$e��Z'Gd%�d&e'��Z(Gd'�d(e��Z)Gd)�d*e��Z*Gd+�d,e��Z+Gd-�d.e��Z,Gd/�d0e��Z-Gd1�d2e��Z.Gd3�d4e��Z/Gd5�d6e��Z0Gd7�d8e��Z1Gd9�d:e��Z2Gd;�d<e��Z3Gd=�d>e��Z4Gd?�d@e��Z5GdA�dBe��Z6GdC�dDe��Z7GdE�dFe��Z8GdG�dHe��Z9GdI�dJe!��Z:GdK�dLe��Z;GdM�dNe��Z<GdO�dPe��Z=GdQ�dRe��Z>GdS�dTe>��Z?GdU�dVe��Z@GdW�dXe��ZAGdY�dZe��ZBGd[�d\e��ZCGd]�d^e��ZDGd_�d`eD��ZEGda�dbeD��ZFGdc�dde��ZGGde�dfe��ZHGdg�dhe��ZIGdi�djeI��ZJGdk�dleJ��ZKGdm�dne��ZLGdo�dpeM��ZNGdq�dreN��ZOGds�dteN��ZPGdu�dveO��ZQGdw�dxe
jR��ZSePd
dy��ZTePdzd{��ZUePd|d}��ZVejd~�Wd�Xe
������jYZZejd��Wej[d�Xe��������j\Z]ejd���j^Z_ejd��Wej[d�Xe��������j\Z`ejd��Wej[d�Xe��������j\Zaejd��Wej[d�Xe��������j\Zbd��Zcd��Zdd��Zed��Zfd��Zgd��Zhd��Zid��Zjd��Zkd��Zld��Zmd��Znd��Zod��Zpd��Zqd��Zrd��Zsd��Ztd��Zud��Zvd��Zwd��Zxd��Zyd��Zzd��Z{d��Z|d��Z}d��Z~d��Zd��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�d��Z�d��Z�d��Z�d��Z�dS)��N)�	hexdigits)�
itemgetter)�_encoded_words)�errors)�utilsz 	�(z
()<>@,:;.\"[]�.z."(z/?=z*'%�%c�|�dt|���dd���dd��zdzS)N�"�\�\\z\")�str�replace��values �.D:\Python311\Lib\email\_header_value_parser.py�quote_stringr`s8���s�5�z�z�!�!�$��/�/�7�7��U�C�C�C�C�G�G�z�
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
c���eZdZdZdZdZ�fd�Zd�Z�fd�Ze	d���Z
e	d���Zd�Ze	d	���Z
e	d
���Zd�Zdd
�Zdd�Zdd�Z�xZS)�	TokenListNTc�H��t��j|i|��g|_dS�N)�super�__init__�defects)�self�args�kw�	__class__s   �rrzTokenList.__init__ys*��������$�%�"�%�%�%�����rc�@�d�d�|D����S)N�c3�4K�|]}t|��V��dSr�r��.0�xs  r�	<genexpr>z$TokenList.__str__.<locals>.<genexpr>~�(����,�,�!�s�1�v�v�,�,�,�,�,�,r��join�rs r�__str__zTokenList.__str__}s#���w�w�,�,�t�,�,�,�,�,�,rc���d�|jjt�������S�Nz{}({})��formatr �__name__r�__repr__�rr s �rr3zTokenList.__repr__�s3������t�~�6�"�W�W�-�-�/�/�1�1�	1rc�@�d�d�|D����S)Nr"c3�2K�|]}|j�	|jV��dSrrr%s  rr(z"TokenList.value.<locals>.<genexpr>�s+����8�8�1���8�q�w�8�8�8�8�8�8rr*r,s rrzTokenList.value�s#���w�w�8�8��8�8�8�8�8�8rc�@�td�|D��|j��S)Nc3�$K�|]}|jV��dSr)�all_defectsr%s  rr(z(TokenList.all_defects.<locals>.<genexpr>�s$����0�0�a�A�M�0�0�0�0�0�0r)�sumrr,s rr9zTokenList.all_defects�s#���0�0�4�0�0�0�$�,�?�?�?rc�6�|d���S�Nr)�startswith_fwsr,s rr=zTokenList.startswith_fws�s���A�w�%�%�'�'�'rc�6�	td�|D����S)Nc3�$K�|]}|jV��dSr)�
as_ew_allowed)r&�parts  rr(z*TokenList.as_ew_allowed.<locals>.<genexpr>�s%����7�7�$�4�%�7�7�7�7�7�7r)�allr,s rr@zTokenList.as_ew_allowed�s"��O��7�7�$�7�7�7�7�7�7rc�H�g}|D]}|�|j���|Sr)�extend�comments)rrE�tokens   rrEzTokenList.comments�s2�����	,�	,�E��O�O�E�N�+�+�+�+��rc�$�t||���S)N��policy)�_refold_parse_tree�rrIs  r�foldzTokenList.fold�s��!�$�v�6�6�6�6rr"c�L�t|�|�����dS)N��indent)�print�ppstr�rrOs  r�pprintzTokenList.pprint�s$��
�d�j�j��j�'�'�(�(�(�(�(rc�T�d�|�|�����S)N�
rN)r+�_pprRs  rrQzTokenList.ppstr�s"���y�y������0�0�1�1�1rc#�nK�d�||jj|j��V�|D]K}t	|d��s|d�|��zV��-|�|dz��Ed{V���L|jrd�|j��}nd}d�||��V�dS)Nz{}{}/{}(rVz*    !! invalid element in token list: {!r}z    z Defects: {}r"z{}){})r1r r2�
token_type�hasattrrVr)rrOrF�extras    rrVz
TokenList._pp�s����������N�#��O���	�	�	��	4�	4�E��5�%�(�(�
4��!5�5;�V�E�]�]�C�D�D�D�D�!�9�9�V�F�]�3�3�3�3�3�3�3�3�3�3��<�	�"�)�)�$�,�7�7�E�E��E��n�n�V�U�+�+�+�+�+�+�+r�r")r2�
__module__�__qualname__rX�syntactic_break�ew_combine_allowedrr-r3�propertyrr9r=r@rErLrSrQrV�
__classcell__�r s@rrrss9��������J��O��������-�-�-�1�1�1�1�1��9�9��X�9��@�@��X�@�(�(�(��8�8��X�8�����X��7�7�7�)�)�)�)�2�2�2�2�,�,�,�,�,�,�,�,rrc�:�eZdZed���Zed���ZdS)�WhiteSpaceTokenListc��dS�N� �r,s rrzWhiteSpaceTokenList.value�����src��d�|D��S)Nc�2�g|]}|jdk�
|j��S)�comment)rX�contentr%s  r�
<listcomp>z0WhiteSpaceTokenList.comments.<locals>.<listcomp>�s&��C�C�C�a�1�<��+B�C��	�C�C�Crrhr,s rrEzWhiteSpaceTokenList.comments�s��C�C�4�C�C�C�CrN)r2r\r]r`rrErhrrrdrd�sM������
����X���D�D��X�D�D�Drrdc��eZdZdZdS)�UnstructuredTokenList�unstructuredN�r2r\r]rXrhrrrprp�s�������J�J�Jrrpc��eZdZdZdS)�Phrase�phraseNrrrhrrrtrt���������J�J�Jrrtc��eZdZdZdS)�Word�wordNrrrhrrrxrx���������J�J�Jrrxc��eZdZdZdS)�CFWSList�cfwsNrrrhrrr|r|�rzrr|c��eZdZdZdS)�Atom�atomNrrrhrrrr�rzrrc��eZdZdZdZdS)�TokenrFFN)r2r\r]rX�encode_as_ewrhrrr�r��s�������J��L�L�Lrr�c��eZdZdZdZdZdZdS)�EncodedWord�encoded-wordN)r2r\r]rX�cte�charset�langrhrrr�r��s"�������J�
�C��G��D�D�Drr�c�T�eZdZdZed���Zed���Zed���ZdS)�QuotedString�
quoted-stringc�8�|D]}|jdkr	|jcS�dS�N�bare-quoted-string�rXr�rr's  rrmzQuotedString.content�s;���	�	�A��|�3�3�
��w����
�	�	rc���g}|D]J}|jdkr#|�t|�����0|�|j���Kd�|��S)Nr�r")rX�appendrrr+)r�resr's   r�quoted_valuezQuotedString.quoted_value�sh�����	$�	$�A��|�3�3�
$��
�
�3�q�6�6�"�"�"�"��
�
�1�7�#�#�#�#��w�w�s�|�|�rc�8�|D]}|jdkr	|jcS�dSr�r��rrFs  r�stripped_valuezQuotedString.stripped_value�s?���	#�	#�E���#7�7�
#��{�"�"�"�
#�	#�	#rN)r2r\r]rXr`rmr�r�rhrrr�r��sh������ �J�
����X��
����X���#�#��X�#�#�#rr�c�.�eZdZdZd�Zed���ZdS)�BareQuotedStringr�c�Z�td�d�|D������S)Nr"c3�4K�|]}t|��V��dSrr$r%s  rr(z+BareQuotedString.__str__.<locals>.<genexpr>s(����#9�#9�q�C��F�F�#9�#9�#9�#9�#9�#9r)rr+r,s rr-zBareQuotedString.__str__�s+���B�G�G�#9�#9�D�#9�#9�#9�9�9�:�:�:rc�@�d�d�|D����S)Nr"c3�4K�|]}t|��V��dSrr$r%s  rr(z)BareQuotedString.value.<locals>.<genexpr>r)rr*r,s rrzBareQuotedString.value�#���w�w�,�,�t�,�,�,�,�,�,rN)r2r\r]rXr-r`rrhrrr�r��sC������%�J�;�;�;��-�-��X�-�-�-rr�c�J�eZdZdZd�Zd�Zed���Zed���ZdS)�Commentrlc�l��d�tdg�fd��D��dggg����S)Nr"rc�:��g|]}��|����Srh)�quote)r&r'rs  �rrnz#Comment.__str__.<locals>.<listcomp>s#���9�9�9�q�T�Z�Z��]�]�9�9�9r�))r+r:r,s`rr-zComment.__str__sP����w�w�s� �E�9�9�9�9�D�9�9�9� �E�� "�	#�#�$�$�	$rc���|jdkrt|��St|���dd���dd���dd��S)Nrlr
rrz\(r�z\))rXrr)rrs  rr�z
Comment.quotese����y�(�	��u�:�:���5�z�z�!�!�$��/�/�7�7�"%�u�.�.�.5�g�"%�u�/.�/.�	.rc�@�d�d�|D����S)Nr"c3�4K�|]}t|��V��dSrr$r%s  rr(z"Comment.content.<locals>.<genexpr>r)rr*r,s rrmzComment.contentr�rc��|jgSr)rmr,s rrEzComment.commentss����~�rN)	r2r\r]rXr-r�r`rmrErhrrr�r�sm�������J�$�$�$�.�.�.��-�-��X�-�����X���rr�c�T�eZdZdZed���Zed���Zed���ZdS)�AddressListzaddress-listc��d�|D��S)Nc�(�g|]}|jdk�
|��S)�address�rXr%s  rrnz)AddressList.addresses.<locals>.<listcomp>'�$��;�;�;�a�1�<��#:�;��;�;�;rrhr,s r�	addresseszAddressList.addresses%���;�;�4�;�;�;�;rc�6�td�|D��g��S)Nc3�:K�|]}|jdk�
|jV��dS�r�N�rX�	mailboxesr%s  rr(z(AddressList.mailboxes.<locals>.<genexpr>+sC����>�>��Q�\�9�%<�>�A�K�>�>�>�>�>�>r�r:r,s rr�zAddressList.mailboxes)�6���>�>�!�>�>�>�?A�C�C�	Crc�6�td�|D��g��S)Nc3�:K�|]}|jdk�
|jV��dSr��rX�
all_mailboxesr%s  rr(z,AddressList.all_mailboxes.<locals>.<genexpr>0sC����>�>��Q�\�9�%<�>�A�O�>�>�>�>�>�>rr�r,s rr�zAddressList.all_mailboxes.r�rN)r2r\r]rXr`r�r�r�rhrrr�r�!sp�������J�
�<�<��X�<��C�C��X�C��C�C��X�C�C�Crr�c�T�eZdZdZed���Zed���Zed���ZdS)�Addressr�c�B�|djdkr
|djSdS)Nr�group�rX�display_namer,s rr�zAddress.display_name8s-����7���(�	(���7�'�'�	(�	(rc�v�|djdkr	|dgS|djdkrgS|djS�Nr�mailbox�invalid-mailboxr�r,s rr�zAddress.mailboxes=sI����7���*�	���G�9��
�!�W�
�#4�
4�	��I��A�w� � rc��|djdkr	|dgS|djdkr	|dgS|djSr�r�r,s rr�zAddress.all_mailboxesEsP����7���*�	���G�9��
�!�W�
�#4�
4�	���G�9���A�w�$�$rN)r2r\r]rXr`r�r�r�rhrrr�r�4sh�������J�
�(�(��X�(��!�!��X�!��%�%��X�%�%�%rr�c�>�eZdZdZed���Zed���ZdS)�MailboxList�mailbox-listc��d�|D��S)Nc�(�g|]}|jdk�
|��S)r�r�r%s  rrnz)MailboxList.mailboxes.<locals>.<listcomp>Sr�rrhr,s rr�zMailboxList.mailboxesQr�rc��d�|D��S)Nc�$�g|]
}|jdv�|��S))r�r�r�r%s  rrnz-MailboxList.all_mailboxes.<locals>.<listcomp>Ws4��?�?�?�a��|�=�=�?��?�?�?rrhr,s rr�zMailboxList.all_mailboxesUs"��?�?�4�?�?�?�	?rN�r2r\r]rXr`r�r�rhrrr�r�MsM�������J�
�<�<��X�<��?�?��X�?�?�?rr�c�>�eZdZdZed���Zed���ZdS)�	GroupList�
group-listc�F�|r|djdkrgS|djS�Nrr�r�r,s rr�zGroupList.mailboxes_s/���	�t�A�w�)�^�;�	��I��A�w� � rc�F�|r|djdkrgS|djSr�r�r,s rr�zGroupList.all_mailboxeses/���	�t�A�w�)�^�;�	��I��A�w�$�$rNr�rhrrr�r�[sM�������J�
�!�!��X�!�
�%�%��X�%�%�%rr�c�T�eZdZdZed���Zed���Zed���ZdS)�Groupr�c�B�|djdkrgS|djS�N�r�r�r,s rr�zGroup.mailboxesps(����7���-�	��I��A�w� � rc�B�|djdkrgS|djSr�r�r,s rr�zGroup.all_mailboxesvs(����7���-�	��I��A�w�$�$rc��|djSr<)r�r,s rr�zGroup.display_name|s���A�w�#�#rN)r2r\r]rXr`r�r�r�rhrrr�r�lsh�������J�
�!�!��X�!�
�%�%��X�%�
�$�$��X�$�$�$rr�c��eZdZdZed���Zed���Zed���Zed���Zed���Z	dS)�NameAddr�	name-addrc�F�t|��dkrdS|djS�N�r)�lenr�r,s rr�zNameAddr.display_name�s&���t�9�9��>�	��4��A�w�#�#rc��|djS�N�����
local_partr,s rr�zNameAddr.local_part�s���B�x�"�"rc��|djSr���domainr,s rr�zNameAddr.domain�s���B�x��rc��|djSr�)�router,s rr�zNameAddr.route�s���B�x�~�rc��|djSr���	addr_specr,s rr�zNameAddr.addr_spec�s���B�x�!�!rN�
r2r\r]rXr`r�r�r�r�r�rhrrr�r��s��������J�
�$�$��X�$�
�#�#��X�#�����X������X���"�"��X�"�"�"rr�c�j�eZdZdZed���Zed���Zed���Zed���ZdS)�	AngleAddrz
angle-addrc�8�|D]}|jdkr	|jcS�dS�N�	addr-spec)rXr�r�s  rr�zAngleAddr.local_part�s=���	$�	$�A��|�{�*�
$��|�#�#�#�
$�	$�	$rc�8�|D]}|jdkr	|jcS�dSr��rXr�r�s  rr�zAngleAddr.domain�s:���	 �	 �A��|�{�*�
 ��x����
 �	 �	 rc�8�|D]}|jdkr	|jcS�dS)N�	obs-route)rX�domainsr�s  rr�zAngleAddr.route�s=���	!�	!�A��|�{�*�
!��y� � � �
!�	!�	!rc��|D];}|jdkr.|jr	|jcSt|j��|jzcS�<dS)Nr�z<>)rXr�r�rr�s  rr�zAngleAddr.addr_spec�sd���	�	�A��|�{�*�
D��<�D��;�&�&�&�'���5�5���C�C�C�C�	
D��4rN)	r2r\r]rXr`r�r�r�r�rhrrr�r��s��������J�
�$�$��X�$�
� � ��X� �
�!�!��X�!�
����X���rr�c�(�eZdZdZed���ZdS)�ObsRouter�c��d�|D��S)Nc�2�g|]}|jdk�
|j��Sr�r�r%s  rrnz$ObsRoute.domains.<locals>.<listcomp>�s&��C�C�C�Q�!�,�(�*B�C���C�C�Crrhr,s rr�zObsRoute.domains�s��C�C�$�C�C�C�CrN)r2r\r]rXr`r�rhrrr�r��s7�������J�
�D�D��X�D�D�Drr�c��eZdZdZed���Zed���Zed���Zed���Zed���Z	dS)�Mailboxr�c�B�|djdkr
|djSdS�Nrr�r�r,s rr�zMailbox.display_name�s-����7���,�	(���7�'�'�	(�	(rc��|djSr<r�r,s rr�zMailbox.local_part�����A�w�!�!rc��|djSr<r�r,s rr�zMailbox.domain�s���A�w�~�rc�B�|djdkr
|djSdSr)rXr�r,s rr�z
Mailbox.route�s,����7���,�	!���7�=� �	!�	!rc��|djSr<r�r,s rr�zMailbox.addr_spec�s���A�w� � rNr�rhrrrr�s��������J�
�(�(��X�(��"�"��X�"�����X���!�!��X�!��!�!��X�!�!�!rrc�8�eZdZdZed���ZexZxZxZZ	dS)�InvalidMailboxr�c��dSrrhr,s rr�zInvalidMailbox.display_name�����trNr�rhrrrr�sB������"�J�
����X��/;�:�J�:��:�%�)�)�)rrc�6��eZdZdZdZe�fd���Z�xZS)�Domainr�Fc�t��d�t��j�����S�Nr"�r+rr�splitr4s �rr�z
Domain.domain��'����w�w�u�w�w�}�*�*�,�,�-�-�-r)r2r\r]rXr@r`r�rarbs@rrr�sL��������J��M�
�.�.�.�.��X�.�.�.�.�.rrc��eZdZdZdS)�DotAtom�dot-atomNrrrhrrrr�s�������J�J�Jrrc��eZdZdZdZdS)�DotAtomTextz
dot-atom-textTN�r2r\r]rXr@rhrrrr�s������ �J��M�M�Mrrc��eZdZdZdZdS)�
NoFoldLiteralzno-fold-literalFNrrhrrrrs������"�J��M�M�Mrrc�n�eZdZdZdZed���Zed���Zed���Zed���Z	dS)�AddrSpecr�Fc��|djSr<r�r,s rr�zAddrSpec.local_part
rrc�F�t|��dkrdS|djS)N�r�)r�r�r,s rr�zAddrSpec.domains%���t�9�9�q�=�	��4��B�x��rc���t|��dkr
|djS|dj���|djz|dj���zS)Nr"rr�r�)r�r�rstrip�lstripr,s rrzAddrSpec.valuesZ���t�9�9�q�=�	!���7�=� ��A�w�}�#�#�%�%�d�1�g�m�3�D��G�M�4H�4H�4J�4J�J�Jrc���t|j��}t|��t|tz
��krt	|j��}n|j}|j�
|dz|jzS|S)N�@)�setr�r��
DOT_ATOM_ENDSrr�)r�nameset�lps   rr�zAddrSpec.addr_specsi���d�o�&�&���w�<�<�#�g�m�3�4�4�4�	!��d�o�.�.�B�B���B��;�	*���8�d�k�)�)��	rN)
r2r\r]rXr@r`r�r�rr�rhrrrrs��������J��M�
�"�"��X�"�����X��
�K�K��X�K�
����X���rrc��eZdZdZdZdS)�ObsLocalPartzobs-local-partFNrrhrrr-r-&s������!�J��M�M�Mrr-c�L��eZdZdZdZed���Ze�fd���Z�xZS)�DisplayNamezdisplay-nameFc���t|��}t|��dkr|jS|djdkr|�d��n7|ddjdkr t|ddd���|d<|djdkr|���n7|ddjdkr t|ddd���|d<|jS)Nrr}r�r�)rr�rrX�pop)rr�s  rr�zDisplayName.display_name1s�����o�o���s�8�8�q�=�	��9���q�6���&�	/��G�G�A�J�J�J�J��1�v�a�y�#�v�-�
/�"�3�q�6�!�"�"�:�.�.��A���r�7���'�	2��G�G�I�I�I�I��2�w�r�{�%��/�
2�#�C��G�C�R�C�L�1�1��B���y�rc�t��d}|jrd}n|D]}|jdkrd}�t|��dkrt|rrdx}}|djdks|ddjdkrd}|djdks|ddjdkrd}|t|j��z|zSt��jS)	NFTr�rr"r}rgr�)rrXr�rr�rr)rr�r'�pre�postr s     �rrzDisplayName.valueBs�������<�	!��E�E��
!�
!���<�?�2�!� �E���t�9�9��>�	!�e�	!��O�C�$��A�w�!�6�)�
�T�!�W�Q�Z�-B�F�-J�
����B�x�"�F�*�
�d�2�h�r�l�.E�v�.M�
����|�D�$5�6�6�6�t�;�;��7�7�=� r)	r2r\r]rXr_r`r�rrarbs@rr/r/,sh��������J���
����X�� �!�!�!�!��X�!�!�!�!�!rr/c�B�eZdZdZdZed���Zed���ZdS)�	LocalPartz
local-partFc�X�|djdkr
|djS|djS)Nrr�)rXr�rr,s rrzLocalPart.value[s/����7���0�	!���7�'�'���7�=� rc�
�tg}t}d}|dtgzD]�}|jdkr�|r6|jdkr+|djdkrt|dd���|d<t|t��}|rG|jdkr<|djdkr+|�t|dd�����n|�|��|d}|}��t|dd���}|jS)NFrr}�dotr�r�)�DOTrXr�
isinstancer�r)rr��last�
last_is_tl�tok�is_tls      rr�zLocalPart.local_partbs���e�����
���7�c�U�?�
	�
	�C��~��'�
���
/�s�~��6�
/���H�'�6�1�
/�#�D��"��I�.�.��B���s�I�.�.�E��
 �$�/�U�2�
 ���F�%��/�
 ��
�
�9�S����W�-�-�.�.�.�.��
�
�3�����r�7�D��J�J���A�b�D�	�"�"���y�rN)r2r\r]rXr@r`rr�rhrrr6r6VsR�������J��M�
�!�!��X�!�����X���rr6c�L��eZdZdZdZe�fd���Zed���Z�xZS)�
DomainLiteralzdomain-literalFc�t��d�t��j�����Srrr4s �rr�zDomainLiteral.domainrrc�8�|D]}|jdkr	|jcS�dS)N�ptextr�r�s  r�ipzDomainLiteral.ip�s:���	�	�A��|�w�&�
��w����
�	�	r)	r2r\r]rXr@r`r�rErarbs@rrArAzsg�������!�J��M�
�.�.�.�.��X�.�����X�����rrAc��eZdZdZdZdZdS)�MIMEVersionzmime-versionN)r2r\r]rX�major�minorrhrrrGrG�s�������J��E��E�E�ErrGc�J�eZdZdZdZdZdZed���Zed���Z	dS)�	Parameter�	parameterF�us-asciic�.�|jr
|djndSr�)�	sectioned�numberr,s r�section_numberzParameter.section_number�s��"&��6�t�A�w�~�~�Q�6rc��|D]N}|jdkr	|jcS|jdkr-|D]*}|jdkr|D]}|jdkr
|jcccS��+�OdS)Nrr�r�r")rXr�r�s  r�param_valuezParameter.param_value�s����	<�	<�E���7�*�
,��+�+�+�+���?�2�
<�"�<�<�E��'�+?�?�<�%*�<�<�E�$�/�7�:�<�',�';� ;� ;� ;� ;� ;� ;� ;�<����rrN)
r2r\r]rXrO�extendedr�r`rQrSrhrrrKrK�s\�������J��I��H��G�
�7�7��X�7�
����X���rrKc��eZdZdZdS)�InvalidParameter�invalid-parameterNrrrhrrrVrV�s������$�J�J�JrrVc�(�eZdZdZed���ZdS)�	Attribute�	attributec�V�|D]%}|j�d��r	|jcS�&dS)N�attrtext)rX�endswithrr�s  rr�zAttribute.stripped_value�sG���	#�	#�E���(�(��4�4�
#��{�"�"�"�
#�	#�	#rN�r2r\r]rXr`r�rhrrrYrY�s2�������J�
�#�#��X�#�#�#rrYc��eZdZdZdZdS)�Section�sectionN)r2r\r]rXrPrhrrr`r`�s�������J�
�F�F�Frr`c�(�eZdZdZed���ZdS)�Valuerc��|d}|jdkr|d}|j�d��r|jS|jS)Nrr}r�)r�rZzextended-attribute)rXr]r�rr�s  rr�zValue.stripped_value�sU���Q�����v�%�	���G�E���$�$�D�F�F�	(��'�'��z�rNr^rhrrrcrc�s2�������J�
����X���rrcc�2�eZdZdZdZed���Zd�ZdS)�MimeParameters�mime-parametersFc#�K�i}|D]y}|j�d��s�|djdkr�/|dj���}||vrg||<||�|j|f���z|���D�]4\}}t|td�����}|dd}|j	}|j
sgt|��dkrT|dddkrB|ddj�tjd����|dd�}g}d}|D�]j\}	}
|	|kr`|
j
s-|
j�tjd�����@|
j�tjd����|dz
}|
j}|
j
r�	t j�|��}	|�|d	��}n-#t(t*f$r|�d
d	��}YnwxYwt-j|��r+|
j�tj����n1#t*$r$t j�|d���}YnwxYw|�|����ld
�|��}||fV���6dS)NrLrrZ)�keyr�z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numbering�surrogateescaperMzlatin-1)�encodingr")rXr]r�stripr�rQ�items�sortedrr�rTr�rr�InvalidHeaderDefectrS�urllib�parse�unquote_to_bytes�decode�LookupError�UnicodeEncodeErrorr�_has_surrogates�UndecodableBytesDefect�unquoter+)r�paramsrF�name�parts�first_paramr��value_parts�irQ�paramrs            rryzMimeParameters.params�sR�������	?�	?�E��#�,�,�[�9�9�
���Q�x�"�k�1�
����8�>�'�'�)�)�D��6�!�
"�!��t���4�L����!5�u� =�>�>�>�>�!�<�<�>�>�3	�3	�K�D�%��5�j��m�m�4�4�4�E���(�1�+�K�!�)�G��'�
&�C��J�J��N�
&���8�A�;�!�#�&��!�H�Q�K�'�.�.�v�/I�H�0J�0J�K�K�K�!�"�1�"�I�E��K��A�).�!
*�!
*�%���!�Q�&�
I�!�>�I��
�,�,�V�-G�I�.K�.K�L�L�L� ��
�,�,�V�-G�F�.H�.H�I�I�I��Q����)���>�R�R� &�� =� =�e� D� D��P�$)�L�L��:K�$L�$L�E�E�� +�-?�@�P�P�P�
%*�L�L��=N�$O�$O�E�E�E�P����!�0��7�7�R�!�M�0�0��1N�1P�1P�Q�Q�Q���.�P�P�P�!'�� 4� 4�U�Y� 4� O� O����	P���� �"�"�5�)�)�)�)��G�G�K�(�(�E���+�����g3	�3	s$�I&�"G9�9'H#�"H#�&+J�Jc	��g}|jD]S\}}|r7|�d�|t|�������>|�|���Td�|��}|rd|zndS)N�{}={}z; rgr")ryr�r1rr+)rryrzrs    rr-zMimeParameters.__str__s������;�	$�	$�K�D�%��
$��
�
�g�n�n�T�<��3F�3F�G�G�H�H�H�H��
�
�d�#�#�#�#����6�"�"��%�-�s�V�|�|�2�-rN)r2r\r]rXr^r`ryr-rhrrrfrf�sJ������"�J��O�
�C�C��X�C�J.�.�.�.�.rrfc�(�eZdZdZed���ZdS)�ParameterizedHeaderValueFc�R�t|��D]}|jdkr	|jcS�iS)Nrg)�reversedrXryr�s  rryzParameterizedHeaderValue.params-s@���d�^�^�	$�	$�E���#4�4�
$��|�#�#�#�
$��	rN)r2r\r]r^r`ryrhrrr�r�'s4�������O�
����X���rr�c��eZdZdZdZdZdZdS)�ContentTypezcontent-typeF�text�plainN)r2r\r]rXr@�maintype�subtyperhrrr�r�5s"�������J��M��H��G�G�Grr�c��eZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r2r\r]rXr@�content_dispositionrhrrr�r�<s ������&�J��M����rr�c��eZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingF�7bitN)r2r\r]rXr@r�rhrrr�r�Bs������,�J��M�
�C�C�Crr�c��eZdZdZdZdS)�HeaderLabelzheader-labelFNrrhrrr�r�Hs�������J��M�M�Mrr�c��eZdZdZdZd�ZdS)�MsgIDzmsg-idFc�0�t|��|jzSr)r�lineseprKs  rrLz
MsgID.foldQs���4�y�y�6�>�)�)rN)r2r\r]rXr@rLrhrrr�r�Ms-�������J��M�*�*�*�*�*rr�c��eZdZdZdS)�	MessageIDz
message-idNrrrhrrr�r�Vs�������J�J�Jrr�c��eZdZdZdS)�InvalidMessageIDzinvalid-message-idNrrrhrrr�r�Zs������%�J�J�Jrr�c��eZdZdZdS)�Header�headerNrrrhrrr�r�^rvrr�c�~��eZdZdZdZdZ�fd�Z�fd�Zd�Ze	d���Z
d�fd�	Zd�Ze	d	���Z
d
�Z�xZS)�TerminalTc�h��t���||��}||_g|_|Sr)r�__new__rXr)�clsrrXrr s    �rr�zTerminal.__new__ls-����w�w���s�E�*�*��$�������rc���d�|jjt�������Sr/r0r4s �rr3zTerminal.__repr__rs,������t�~�6����8H�8H�8J�8J�K�K�Krc�N�t|jjdz|jz��dS)N�/)rPr r2rXr,s rrSzTerminal.pprintus'��
�d�n�%��+�d�o�=�>�>�>�>�>rc�*�t|j��Sr)�listrr,s rr9zTerminal.all_defectsxs���D�L�!�!�!rr"c	����d�||jj|jt	�����|jsdnd�|j����gS)Nz
{}{}/{}({}){}r"z {})r1r r2rXrr3r)rrOr s  �rrVzTerminal._pp|s_����&�&���N�#��O��G�G������l�B�B�B����T�\�(B�(B����	rc��dSrrhr,s r�pop_trailing_wszTerminal.pop_trailing_ws�rrc��gSrrhr,s rrEzTerminal.comments�s���	rc�.�t|��|jfSr)rrXr,s r�__getnewargs__zTerminal.__getnewargs__�s���4�y�y�$�/�*�*rr[)r2r\r]r@r_r^r�r3rSr`r9rVr�rEr�rarbs@rr�r�fs���������M����O������L�L�L�L�L�?�?�?��"�"��X�"��������������X��+�+�+�+�+�+�+rr�c�*�eZdZed���Zd�ZdS)�WhiteSpaceTerminalc��dSrfrhr,s rrzWhiteSpaceTerminal.value�rirc��dS)NTrhr,s rr=z!WhiteSpaceTerminal.startswith_fws�s���trN�r2r\r]r`rr=rhrrr�r��s<������
����X������rr�c�*�eZdZed���Zd�ZdS)�
ValueTerminalc��|Srrhr,s rrzValueTerminal.value�s���rc��dS)NFrhr,s rr=zValueTerminal.startswith_fws�s���urNr�rhrrr�r��s<������
����X������rr�c�*�eZdZed���Zd�ZdS)�EWWhiteSpaceTerminalc��dSrrhr,s rrzEWWhiteSpaceTerminal.value�s���rrc��dSrrhr,s rr-zEWWhiteSpaceTerminal.__str__�s���rrN)r2r\r]r`rr-rhrrr�r��s<������
����X������rr�c��eZdZdS)�_InvalidEwErrorN)r2r\r]rhrrr�r��s������;�;rr�r9�,�list-separatorr'zroute-component-markerz([{}]+)r"z[^{}]+z[\x00-\x20\x7F]c��	t|��}|r,|j�tj|����tj|��r.|j�tjd����dSdS)Nz*Non-ASCII characters found in header token)�_non_printable_finderrr�r�NonPrintableDefectrrvrw)�xtext�non_printabless  r�_validate_xtextr��s���J�*�5�1�1�N��H�
�
���V�6�~�F�F�G�G�G���U�#�#�;�
�
���V�:�8�:�:�	;�	;�	;�	;�	;�;�;rc�n�	t|d��^}}g}d}d}tt|����D]D}||dkr
|rd}d}nd}�|rd}n|||vrn!|�||���E|dz}d�|��d�||d�g|z��|fS)Nr�Fr
Tr")�
_wsp_splitter�ranger�r�r+)r�endchars�fragment�	remainder�vchars�escape�had_qp�poss        r�_get_ptext_to_endcharsr��s����)���2�2��H�y�
�F�
�F�
�F��S��]�]�#�#�����C�=�D� �	��
����������	��F�F�
�c�]�h�
&�	��E��
�
�h�s�m�$�$�$�$��A�g��
�7�7�6�?�?�B�G�G�X�c�d�d�^�$4�y�$@�A�A�6�I�Irc��	|���}t|dt|��t|��z
�d��}||fS)N�fws)r%r�r�)r�newvaluer�s   r�get_fwsr�sK����|�|�~�~�H�
�U�#<�C��J�J�s�8�}�}�$<�#<�=�u�
E�
E�C���=�rc���	t��}|�d��s'tjd�|�����|dd��dd��^}}||dd�kr'tjd�|�����d�|��}t|��dkrW|dtvrH|dtvr9|�	d��dkr |�dd��^}}|dz|z}t|�����dkr,|j
�tjd	����||_
d�|��}	tjd|zdz��\}}}}	n<#t t"f$r(t%d
�|j
�����wxYw||_||_|j
�|	��|r�|dt,vr(t/|��\}
}|�|
���9t1|d��^}}t3|d��}t5|��|�|��d�|��}|��|r;|dt,vr,|j
�tjd����||fS)
N�=?z"expected encoded word but found {}r�z?=r�r"r�?zwhitespace inside encoded wordz!encoded word format invalid: '{}'�vtextz.missing trailing whitespace after encoded-word)r��
startswithr�HeaderParseErrorr1rr+r�r�countrr�ror��_ewrs�
ValueError�KeyErrorr�r�r�rD�WSPr�r�r�r�)
r�ewr>r��remstr�restr�r�r�rrF�charsr�s
             r�get_encoded_wordr�s���
���B����D�!�!�@��%�0�7�7��>�>�@�@�	@��A�B�B�i�o�o�d�A�.�.�O�C�)�
�e�A�B�B�i��@��%�0�7�7��>�>�@�@�	@�
�W�W�Y�
�
�F��F���a�� ��q�	�Y�� ��q�	�Y�� �	�	�	�#����� �
"�<�<��a�0�0���y��D�j�4���
�3�9�9�;�;���!��/�
�
���&�4�,�.�.�	/�	/�	/�
�B�F��G�G�I���E�@�'*�z�$��*�t�2C�'D�'D�$��g�t�W�W����!�@�@�@��/�6�6�r�v�>�>�@�@�	@�@�����B�J��B�G��J���g����
�	"���7�c�>�	�!�$�-�-�K�E�4��I�I�e�����)�$��2�2���	��e�W�-�-�������
�	�	�%�����w�w�y�!�!���	"�
�?��q���$�?�
�
���&�4�<�>�>�	?�	?�	?�
�u�9�s�F.�.9G'c��	t��}|�r�|dtvr(t|��\}}|�|���:d}|�d��r�	t|��\}}d}t
|��dkr?|djdkr.|j�tj
d����d}|r=t
|��dkr*|d	jd
krt|dd��|d<|�|����#t$rd}Yntj
$rYnwxYwt|d��^}}|r1t�|��r|�d��^}}t%|d��}t'|��|�|��d�|��}|���|S)
NrTr�r�r�z&missing whitespace before encoded wordFr����r�r�r")rpr�r�r�r�r�r�rXrrror�r�r�r��rfc2047_matcher�search�	partitionr�r�r+)rrqrF�valid_ew�have_wsr>r�r�s        r�get_unstructuredr�?s2���,)�*�*�L�
�(#���8�s�?�	�"�5�>�>�L�E�5�����&�&�&�������D�!�!�	�
�/��6�6���u����|�$�$�q�(�(�#�B�'�2�e�;�(�$�,�3�3�F�4N�D�5F�5F�G�G�G�"'���5�s�<�0�0�1�4�5�#�B�'�2�n�D�5�+?�(��,�e�,5�,5��R�(��#�#�E�*�*�*���%#�
!�
!�
!� �����*�
�
�
���
����"(��q�1�1���i��	4��.�.�s�3�3�	4�#�o�o�d�3�3�O�C�)��c�7�+�+����������E�"�"�"����	�"�"��Q�(#�R�s�"D�D=�,D=�<D=c�r�	t|d��\}}}t|d��}t|��||fS)Nz()rD)r�r�r��rrD�_s   r�get_qp_ctextr��sE��
�-�U�D�9�9�O�E�5�!��u�g�.�.�E��E�����%�<�rc�r�	t|d��\}}}t|d��}t|��||fS)NrrD)r�r�r�r�s   r�get_qcontentr��sE���-�U�C�8�8�O�E�5�!��%��)�)�E��E�����%�<�rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nzexpected atext but found '{}'�atext)�_non_atom_end_matcherrr�r1r�r�r�r�)r�mr�s   r�	get_atextr��s����
	�e�$�$�A��;��%�+�2�2�5�9�9�;�;�	;�
�G�G�I�I�E��#�e�*�*�+�+��E��%��)�)�E��E�����%�<�rc���	|ddkr'tjd�|�����t��}|dd�}|r3|ddkr't	|��\}}|�|��|�r/|ddk�r"|dtvrt|��\}}n�|dd�dkr�d}	t|��\}}|j	�tj
d����d	}n'#tj$rt	|��\}}YnwxYw|rNt|��dkr;|d
jdkr*|djd
krt|d
d��|d
<nt	|��\}}|�|��|r
|ddk��"|s0|j	�tj
d����||fS||dd�fS)Nrrzexpected '"' but found '{}'r�r�r�Fz!encoded word inside quoted stringTr�r�r�r�z"end of header inside quoted string)rr�r1r�r�r�r�r�r�rror�rXr�)r�bare_quoted_stringrFr�s    r�get_bare_quoted_stringr��sa���
�Q�x�3��:��%�*�1�1�%�8�8�:�:�	:�)�+�+���!�"�"�I�E��)��q��S��)�#�E�*�*���u��!�!�%�(�(�(�
�)�E�!�H��O�)���8�s�?�	/�"�5�>�>�L�E�5�5�
�2�A�2�Y�$�
�	/��H�
3�/��6�6���u�"�*�1�1�&�2L�7�39�39�:�:�:������*�
3�
3�
3�+�E�2�2���u�u�u�
3�����
7�C� 2�3�3�a�7�
7�&�r�*�5��>�7�*�2�.�9�^�K�7�-A�*�2�.��.7�.7�&�r�*��(��.�.�L�E�5��!�!�%�(�(�(�+�)�E�!�H��O�)�,�)��"�)�)�&�*D�0�+2�+2�	3�	3�	3�!�5�(�(��u�Q�R�R�y�(�(s�AD�!D*�)D*c�"�	|r3|ddkr'tjd�|�����t��}|dd�}|r�|ddkrv|dtvrt|��\}}n1|ddkrt
|��\}}nt|��\}}|�|��|r|ddk�v|s0|j	�tj
d����||fS||dd�fS)Nrrzexpected '(' but found '{}'r�r�zend of header inside comment)rr�r1r�r�r��get_commentr�r�rro)rrlrFs   rr�r��sF���

�9��q��S��9��%�)�0�0��7�7�9�9�	9��i�i�G��!�"�"�I�E�
��E�!�H��O����8�s�?�	/�"�5�>�>�L�E�5�5�
�1�X��_�	/�&�u�-�-�L�E�5�5�'��.�.�L�E�5����u������E�!�H��O��������v�9�*� ,� ,�	-�	-�	-���~���E�!�"�"�I��rc��	t��}|ri|dtvrZ|dtvrt|��\}}nt	|��\}}|�|��|r|dtv�Z||fSr<)r|�CFWS_LEADERr�r�r�r�)rr}rFs   r�get_cfwsr��s�����:�:�D�
��E�!�H��+����8�s�?�	.�"�5�>�>�L�E�5�5�&�u�-�-�L�E�5����E������E�!�H��+����;�rc�V�	t��}|r6|dtvr't|��\}}|�|��t	|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSr<)r�r�r�r�r�)r�
quoted_stringrFs   r�get_quoted_stringrs����!�N�N�M��$��q��[�(�$�������u����U�#�#�#�)�%�0�0�L�E�5���������$��q��[�(�$�������u����U�#�#�#��%��rc�f�	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����|�d��r;	t|��\}}n9#t
j$rt|��\}}YnwxYwt|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS)Nrzexpected atom but found '{}'r�)rr�r�r��	ATOM_ENDSrr�r1r�r�r�)rr�rFs   r�get_atomrsT����6�6�D����q��[�(��������u����E�����:��q��Y�&�:��%�*�1�1�%�8�8�:�:�	:�������(�	,�+�E�2�2�L�E�5�5���&�	,�	,�	,�%�U�+�+�L�E�5�5�5�	,����
!��'�'���u��K�K��������q��[�(��������u����E������;�s�B)�)!C
�C
c��	t��}|r|dtvr'tjd�|�����|ry|dtvrjt|��\}}|�|��|r0|ddkr$|�t��|dd�}|r|dtv�j|dtur*tjd�d|z�����||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'r	r�r�z4expected atom at end of dot-atom-text but found '{}')rrrr�r1r�r�r:)r�
dot_atom_textrFs   r�get_dot_atom_textr0s(��� �M�M�M��:�E�!�H�	�)�:��%�'+�+1�6�%�=�=�:�:�	:�
��E�!�H�I�-�� ��'�'���u����U�#�#�#��	�U�1�X��_�	�� � ��%�%�%��!�"�"�I�E���E�!�H�I�-���R��C��0��%�'�#�V�C��I�.�.�0�0�	0��%��rc���	t��}|dtvr't|��\}}|�|��|�d��r;	t|��\}}n9#tj$rt|��\}}YnwxYwt|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS)Nrr�)	rr�r�r�r�r�rr�r)r�dot_atomrFs   r�get_dot_atomrCs���
�y�y�H��Q�x�;���������u��������������0�	4�+�E�2�2�L�E�5�5���&�	4�	4�	4�-�U�3�3�L�E�5�5�5�	4����
)��/�/���u��O�O�E�������q��[�(��������u���������U�?�s�A/�/!B�Bc�b�	|dtvrt|��\}}nd}|stjd���|ddkrt	|��\}}nH|dt
vr'tjd�|�����t|��\}}|�|g|dd�<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.rz1Expected 'atom' or 'quoted-string' but found '{}')r�r�rr�r�SPECIALSr1r)r�leaderrFs   r�get_wordr\s����
�Q�x�;��� ����
�������E��%�C�E�E�	E��Q�x��}�'�(��/�/���u�u�	�q��X�	�'��%�'7�7=�v�e�}�}�F�F�	F� ������u�
���H��b�q�b�	��%�<�rc��	t��}	t|��\}}|�|��nA#tj$r/|j�tjd����YnwxYw|�r
|dtvr�|ddkrQ|�t��|j�tj	d����|dd�}n�	t|��\}}nd#tj$rR|dtvr?t|��\}}|j�tj	d����n�YnwxYw|�|��|r|dtv��||fS)Nzphrase does not start with wordrr	zperiod in 'phrase'r�zcomment found without atom)rtrr�rr�rro�PHRASE_ENDSr:�ObsoleteHeaderDefectr�r�)rrurFs   r�
get_phraser~s���
��X�X�F�0�������u��
�
�e�������"�0�0�0�����f�8�-�/�/�	0�	0�	0�	0�	0�0�����!�E�!�H�K�/�!���8�S�=�	!��M�M�#�����N�!�!�&�"=�$�#&�#&�
'�
'�
'��!�"�"�I�E�E�
�'������u�u���*�
�
�
���8�{�*��#+�E�?�?�L�E�5��N�)�)�&�*E�4�+6�+6�7�7�7�7��7�7�
����
�M�M�%� � � �!�!�E�!�H�K�/�!�"�5�=�s"�'9�;A7�6A7�*C=�=AE�Ec��	t��}d}|dtvrt|��\}}|s'tjd�|�����	t
|��\}}nh#tj$rV	t|��\}}n?#tj$r-|ddkr|dtvr�t��}YnwxYwYnwxYw|�|g|dd�<|�
|��|r�|ddks|dtvr�tt|��|z��\}}|j
dkr-|j�
tjd����n,|j�
tjd����||d<	|j�d��n<#t&$r/|j�
tjd����YnwxYw||fS)	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))r6r�r�rr�r1rrrrr��get_obs_local_partrrXrrorr�encoderu�NonASCIILocalPartDefect)rr�rrF�obs_local_parts     r�get_local_partr�s|������J�
�F��Q�x�;��(� ����
����@��%�0�7�7��>�>�@�@�	@� �#�E�*�*���u�u���"� � � �	 �#�E�?�?�L�E�5�5���&�	 �	 �	 ��Q�x�4��
�E�!�H��$;�
���K�K�E�E�E�	 ������ �������H��b�q�b�	����e�����'�%��(�D�.�'�E�!�H�K�$?�'� 2�3�z�?�?�U�3J� K� K�����$�(@�@�	A���%�%�f�&@�N�'P�'P�
Q�
Q�
Q�
Q�
��%�%�f�&A�>�'@�'@�
A�
A�
A�&�
�1�
�>������(�(�(�(���>�>�>���!�!�&�"@�;�#=�#=�	>�	>�	>�	>�	>�>�����u��sH�A0�0C�B�C�9C�C�C�C�C� F;�;6G4�3G4c� �	t��}d}|�r�|ddks|dtv�r�|ddkrU|r,|j�t	jd����|�t��d}|dd�}��|ddkrb|�t|dd����|dd�}|j�t	jd	����d}��|r=|d
jdkr,|j�t	jd����	t|��\}}d}n7#tj
$r%|dtvr�t|��\}}YnwxYw|�|��|r|ddk��|dtv���|djdks"|djd
kr=|djdkr,|j�t	jd����|d
jdks"|d
jd
kr=|djdkr,|j�t	jd����|jrd|_||fS)NFrr
r	zinvalid repeated '.'Tr��misplaced-specialz/'\' character outside of quoted-string/ccontentr�r9zmissing '.' between wordsr}z!Invalid leading '.' in local partr�z"Invalid trailing '.' in local partr)
r-rrr�rror:r�rXrr�r�r�)rr�last_non_ws_was_dotrFs    rrr�s���!�^�^�N���
�%�U�1�X�t�^�%�u�Q�x�{�'B�%���8�s�?�	�"�
-��&�-�-�f�.H�*�/,�/,�-�-�-��!�!�#�&�&�&�"&���!�"�"�I�E��
�1�X�t�^�	��!�!�-��a��0C�#E�#E�
F�
F�
F��!�"�"�I�E��"�)�)�&�*D�B�+D�+D�
E�
E�
E�"'����	.�n�R�0�;�u�D�	.��"�)�)�&�*D�+�+-�+-�
.�
.�
.�	+�#�E�?�?�L�E�5�"'�����&�	+�	+�	+��Q�x�{�*�
��#�E�?�?�L�E�5�5�5�	+����	���e�$�$�$�7�%�U�1�X�t�^�%�u�Q�x�{�'B�%�8	�q��$��-�2��1��(�&�0�2��1��(�%�/�2�	��%�%�f�&@�/�'1�'1�	2�	2�	2��r��%��.�3��2��)�6�1�3��2��)�5�0�3�	��%�%�f�&@�0�'2�'2�	3�	3�	3���=�$<��!��5� � s�E�1F	�F	c���	t|d��\}}}t|d��}|r,|j�t	jd����t
|��||fS)Nz[]rDz(quoted printable found in domain-literal)r�r�rr�rrr�)rrDr�s   r�	get_dtextr �sz��
�2�%��>�>��E�5�&��%��)�)�E�
�9�
�
���V�8�6�8�8�	9�	9�	9��E�����%�<�rc��|rdS|�tjd����|�tdd����dS)NFz"end of input inside domain-literal�]�domain-literal-endT)r�rror�)r�domain_literals  r�_check_for_early_dl_endr%s]�����u����&�4�,�.�.�/�/�/����-��-A�B�B�C�C�C��4rc�N�	t��}|dtvr't|��\}}|�|��|st	jd���|ddkr't	jd�|�����|dd�}t||��r||fS|�tdd����|dtvr't|��\}}|�|��t|��\}}|�|��t||��r||fS|dtvr't|��\}}|�|��t||��r||fS|ddkr't	jd�|�����|�tdd	����|dd�}|r6|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#)rAr�r�r�rr�r1r%r�r�r�r )rr$rFs   r�get_domain_literalr(sK���#�_�_�N��Q�x�;��%�������u����e�$�$�$��A��%�&?�@�@�@��Q�x�3��0��%�'!�!'�����0�0�	0��!�"�"�I�E��u�n�5�5�%��u�$�$����-��-C�D�D�E�E�E��Q�x�3��%��u�~�~���u����e�$�$�$��U�#�#�L�E�5����%� � � ��u�n�5�5�%��u�$�$��Q�x�3��%��u�~�~���u����e�$�$�$��u�n�5�5�%��u�$�$��Q�x�3��0��%�'!�!'�����0�0�	0����-��-A�B�B�C�C�C��!�"�"�I�E��%��q��[�(�%�������u����e�$�$�$��5� � rc��	t��}d}|dtvrt|��\}}|s'tjd�|�����|ddkr5t
|��\}}|�|g|dd�<|�|��||fS	t|��\}}n'#tj$rt|��\}}YnwxYw|r |ddkrtjd���|�|g|dd�<|�|��|r�|ddkr�|j
�tjd����|djdkr
|d|dd�<|rc|ddkrW|�t��t|d	d���\}}|�|��|r|ddk�W||fS)
Nrzexpected domain but found '{}'r'r'zInvalid Domainr	z(domain is not a dot-atom (contains CFWS)rr�)rr�r�rr�r1r(r�rrrrrXr:)rr�rrFs    r�
get_domainr*=s5����X�X�F�
�F��Q�x�;��(� ����
����<��%�,�3�3�E�:�:�<�<�	<��Q�x�3���)�%�0�0���u��	!���E�"�1�"�I��
�
�e�����u�}��'�#�E�*�*���u�u���"�'�'�'�������u�u�u�'�����8��q��S��8��%�&6�7�7�7�
���H��b�q�b�	�
�M�M�%�����!��q��S��!�����f�9�6�8�8�	9�	9�	9��!�9��:�-�	"��q�	�F�1�1�1�I��	!��a��C��	!��M�M�#����#�E�!�"�"�I�.�.�L�E�5��M�M�%� � � ��	!��a��C��	!��5�=�s�B1�1!C�Cc��	t��}t|��\}}|�|��|r|ddkr0|j�t	jd����||fS|�t
dd����t|dd���\}}|�|��||fS)Nrr'z#addr-spec local part with no domain�address-at-symbolr�)rrr�rrror�r*)rr�rFs   r�
get_addr_specr-cs�����
�
�I�!�%�(�(�L�E�5�
���U����� �E�!�H��O� ��� � ��!;�1�"3�"3�	4�	4�	4��%���
���]�3�(;�<�<�=�=�=��e�A�B�B�i�(�(�L�E�5�
���U�����e��rc���	t��}|r�|ddks|dtvr�|dtvr(t|��\}}|�|��n0|ddkr$|�t��|dd�}|r|ddk�u|dtv��|r|ddkr'tjd�|�����|�t��t|dd���\}}|�|��|r�|ddkr�|�t��|dd�}|sn�|dtvr't|��\}}|�|��|ddkrI|�t��t|dd���\}}|�|��|r|ddk��|stjd���|ddkr'tjd�|�����|�tdd	����||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�r�r�r��
ListSeparatorrr�r1�RouteComponentMarkerr*r�)r�	obs_routerFs   r�
get_obs_router3ss�����
�
�I�
��U�1�X�s�]��e�A�h�+�&=����8�{�"�	�#�E�?�?�L�E�5����U�#�#�#�#�
�1�X��_�	����]�+�+�+��!�"�"�I�E�
��U�1�X�s�]��e�A�h�+�&=���F�E�!�H��O�F��%�6�=�=�e�D�D�F�F�	F�
���)�*�*�*��e�A�B�B�i�(�(�L�E�5�
���U����
�$�E�!�H�c�M�$�����'�'�'��a�b�b�	���	����8�{�"�	$�#�E�?�?�L�E�5����U�#�#�#���8�s�?�	$����1�2�2�2�%�e�A�B�B�i�0�0�L�E�5����U�#�#�#��$�E�!�H�c�M�$��O��%�&M�N�N�N��Q�x�3��6��%�('�'-�v�e�}�}�6�6�	6�
���]�3�(A�B�B�C�C�C��e�A�B�B�i��rc�(�	t��}|dtvr't|��\}}|�|��|r|ddkr't	jd�|�����|�tdd����|dd�}|ddkr]|�tdd����|j�t	j	d����|dd�}||fS	t|��\}}n�#tj$r�	t|��\}}|j�t	jd	����n:#tj$r(t	jd
�|�����wxYw|�|��t|��\}}YnwxYw|�|��|r|ddkr|dd�}n,|j�t	j	d����|�tdd����|r6|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�r�r�r�rr�r1r�rror-r3r)r�
angle_addrrFs   r�get_angle_addrr8�s�������J��Q�x�;��!�������u����%� � � ��@�E�!�H��O�@��%�0�7�7��>�>�@�@�	@����m�C�);�<�<�=�=�=��!�"�"�I�E�
�Q�x�3��!����-��-=�>�>�?�?�?���!�!�&�"<�*�#,�#,�	-�	-�	-��a�b�b�	���5� � �,�$�U�+�+���u�u���"�	,�	,�	,�	P�(��/�/�L�E�5���%�%�f�&A�<�'>�'>�
?�
?�
?�
?���&�	P�	P�	P��)�@�G�G��N�N�P�P�
P�	P����	���%� � � �$�U�+�+���u�u�u�	,�������e�����3��q��S��3��a�b�b�	�����!�!�&�"<�0�#2�#2�	3�	3�	3����m�C�)9�:�:�;�;�;��!��q��[�(�!�������u����%� � � ��u��s*�D%�%G�5>E4�3G�47F+�+*G�Gc��	t��}t|��\}}|�|dd���|jdd�|_||fSr)r/rrDr)rr�rFs   r�get_display_namer:�s]����=�=�L��e�$�$�L�E�5�����a�a�a��!�!�!� �=����+�L�����rc�j�	t��}d}|dtvr;t|��\}}|s'tjd�|�����|ddkr�|dtvr'tjd�|�����t|��\}}|s'tjd�|�����|�|g|ddd�<d}|�|��t|��\}}|�|g|dd�<|�|��||fS)Nrz!expected name-addr but found '{}'r5)
r�r�r�rr�r1rr:r�r8)r�	name_addrrrFs    r�
get_name_addrr=�ss����
�
�I�
�F��Q�x�;��D� ����
����	D��)�3�:�:�6�B�B�D�D�
D��Q�x�3�� ���8�{�"�	C��)�3�:�:�5�A�A�C�C�
C�'��.�.���u��	C��)�3�:�:�5�A�A�C�C�
C��	�"�8�E�!�H�R�a�R�L��F��������!�%�(�(�L�E�5�
���H��b�q�b�	�
���U�����e��rc��	t��}	t|��\}}nc#tj$rQ	t	|��\}}n:#tj$r(tjd�|�����wxYwYnwxYwt
d�|jD����rd|_|�	|��||fS)Nzexpected mailbox but found '{}'c3�JK�|]}t|tj��V��dSr)r;rror%s  rr(zget_mailbox.<locals>.<genexpr>sC����3�3���a��3�4�4�3�3�3�3�3�3rr�)
rr=rr�r-r1�anyr9rXr�)rr�rFs   r�get_mailboxrA�s���
�i�i�G�A�$�U�+�+���u�u���"�A�A�A�	A�(��/�/�L�E�5�5���&�	A�	A�	A��)�1�8�8��?�?�A�A�
A�	A�����5�A�����3�3� %� 1�3�3�3�3�3�/�.����N�N�5�����E�>��&�$�B�A�B�7A>�>B�Bc�,�	t��}|r�|d|vrv|dtvr4|�t|dd����|dd�}n't	|��\}}|�|��|r
|d|v�v||fS)Nrrr�)rrr�r�r)rr��invalid_mailboxrFs    r�get_invalid_mailboxrEs����%�&�&�O�
�*�E�!�H�H�,�*���8�{�"�	*��"�"�=��q��1D�$F�$F�
G�
G�
G��!�"�"�I�E�E�%�e�,�,�L�E�5��"�"�5�)�)�)��*�E�!�H�H�,�*��E�!�!rc��	t��}|�rd|ddk�rW	t|��\}}|�|���n}#tj$�rjd}|dt
vr�t
|��\}}|r
|ddvrB|�|��|j�tjd����n�t|d��\}}|�|g|dd�<|�|��|j�tj
d����n�|ddkr-|j�tjd����n^t|d��\}}|�|g|dd�<|�|��|j�tj
d����YnwxYw|rm|ddvrc|d}d|_t|d��\}}|�|��|j�tj
d����|r0|ddkr$|�t��|d	d�}|r
|ddk��W||fS)
Nr�;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr�r�r�r�)r�rAr�rr�r�r�rrrErorXrDr0)r�mailbox_listrFrr�s     r�get_mailbox_listrIs���
��=�=�L�
�(�E�!�H��O�(�	8�&�u�-�-�L�E�5�����&�&�&�&���&�	8�	8�	8��F��Q�x�;�&�
8� (����
����
<��a��D� 0�
<� �'�'��/�/�/� �(�/�/��0K�7�19�19�:�:�:�:�$7�u�d�#C�#C�L�E�5��-�%+�H��b�q�b�	� �'�'��.�.�.� �(�/�/��0J�9�1;�1;�<�<�<�<��q��S��	
8��$�+�+�F�,G�3�-5�-5�6�6�6�6� 3�5�$�?�?���u��)�!'��E�"�1�"�I��#�#�E�*�*�*��$�+�+�F�,F�5�-7�-7�8�8�8���/	8����2�	4�U�1�X�T�)�	4�#�2�&�G�!2�G��.�u�d�;�;�L�E�5��N�N�5�!�!�!�� �'�'��(B�1�)3�)3�
4�
4�
4��	�U�1�X��_�	����
�.�.�.��!�"�"�I�E�Q�(�E�!�H��O�(�R���s�'A
�
E7G�Gc��	t��}|s0|j�tjd����||fSd}|r�|dt
vr~t
|��\}}|sE|j�tjd����|�|��||fS|ddkr|�|��||fSt|��\}}t|j	��dkr\|�|�|��|�
|��|j�tjd����||fS|�|g|dd�<|�|��||fS)Nzend of header before group-listrzend of header in group-listrGzgroup-list with empty entries)r�rr�rror�r�rIr�r�rDr)r�
group_listrrFs    r�get_group_listrLWs�������J��!���!�!�&�"<�-�#/�#/�	0�	0�	0��5� � �
�F��%��q��[�(�%� ����
����	%�
��%�%�f�&@�-�'/�'/�
0�
0�
0����f�%�%�%��u�$�$���8�s�?�	%����f�%�%�%��u�$�$�#�E�*�*�L�E�5�
�5�����"�!��	&����f�%�%�%����%� � � ���!�!�&�"=�+�#-�#-�	.�	.�	.��5� � �
���H��b�q�b�	����e�����u��rc��	t��}t|��\}}|r|ddkr'tjd�|�����|�|��|�t
dd����|dd�}|r;|ddkr/|�t
dd����||dd�fSt|��\}}|�|��|s-|j�tj	d����n3|ddkr'tjd	�|�����|�t
dd����|dd�}|r6|dtvr't|��\}}|�|��||fS)
Nrr/z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr�rGzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r�r:rr�r1r�r�rLrror�r�)rr�rFs   r�	get_grouprN|s����
�G�G�E�#�E�*�*�L�E�5��9�E�!�H��O�9��%�'*�*0�&��-�-�9�9�	9�	�L�L�����	�L�L��s�$C�D�D�E�E�E��!�"�"�I�E�� ��q��S�� �
���]�3�(:�;�;�<�<�<��e�A�B�B�i���!�%�(�(�L�E�5�	�L�L������G�
�
���V�7�$�&�&�	'�	'�	'�	'�	�q��S��G��%�7�>�>�u�E�E�G�G�	G�	�L�L��s�$6�7�7�8�8�8��!�"�"�I�E����q��[�(��������u�
���U�����%�<�rc�@�	t��}	t|��\}}nc#tj$rQ	t	|��\}}n:#tj$r(tjd�|�����wxYwYnwxYw|�|��||fS)Nzexpected address but found '{}')r�rNrr�rAr1r�)rr�rFs   r�get_addressrP�s���� �i�i�G�A� ��'�'���u�u���"�A�A�A�	A�&�u�-�-�L�E�5�5���&�	A�	A�	A��)�1�8�8��?�?�A�A�
A�	A�����5�A�����N�N�5�����E�>�rBc��	t��}|�rv	t|��\}}|�|���n�#tj$�r�}d}|dt
vr�t
|��\}}|r|ddkrC|�|��|j�tjd�����nt|d��\}}|�|g|dd�<|�t|g����|j�tjd����n�|ddkr-|j�tjd����nlt|d��\}}|�|g|dd�<|�t|g����|j�tjd����Yd}~nd}~wwxYw|ru|ddkri|dd}d|_t|d��\}}|�
|��|j�tjd����|r-|�tdd����|d	d�}|��v||fS)
Nrr�z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr�r�r�r�)r�rPr�rr�r�r�rrrEr�rorXrDr�)r�address_listrF�errrr�s      r�get_address_listrT�s�����=�=�L�
�(�	8�&�u�-�-�L�E�5�����&�&�&�&���&�	8�	8�	8��F��Q�x�;�&�
8� (����
����
<��a��C��
<� �'�'��/�/�/� �(�/�/��0K�<�1>�1>�?�?�?�?�$7�u�c�#B�#B�L�E�5��-�%+�H��b�q�b�	� �'�'����(8�(8�9�9�9� �(�/�/��0J�9�1;�1;�<�<�<�<��q��S��	
8��$�+�+�F�,G�3�-5�-5�6�6�6�6� 3�5�#�>�>���u��)�!'��E�"�1�"�I��#�#�G�U�G�$4�$4�5�5�5��$�+�+�F�,F�5�-7�-7�8�8�8����������/	8����2�	4�U�1�X��_�	4�#�2�&�q�)�G�!2�G��.�u�c�:�:�L�E�5��N�N�5�!�!�!�� �'�'��(B�1�)3�)3�
4�
4�
4��	����
�c�3C� D� D�E�E�E��!�"�"�I�E�Q�(�R���s�'=�G�
FG�Gc�H�	t��}|s'tjd�|�����|ddkr'tjd�|�����|�tdd����|dd�}t
|��\}}|�|��|r|ddkr'tjd�|�����|�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)rrr�r1r�r�r )r�no_fold_literalrFs   r�get_no_fold_literalrW�s:���#�o�o�O��E��%�5�<�<�U�C�C�E�E�	E��Q�x�3��,��%�
�#�V�E�]�]�,�,�	,����=��.E�F�F�G�G�G��!�"�"�I�E��U�#�#�L�E�5����5�!�!�!��,�E�!�H��O�,��%�
�#�V�E�]�]�,�,�	,����=��.C�D�D�E�E�E��E�!�"�"�I�%�%rc�(�	t��}|r6|dtvr't|��\}}|�|��|r|ddkr't	jd�|�����|�tdd����|dd�}	t|��\}}n�#tj$r}	t|��\}}|j
�t	jd����n:#tj$r(t	jd�|�����wxYwYnwxYw|�|��|r|ddkrk|j
�t	jd	����|r9|dd
kr-|�td
d����|dd�}||fS|�tdd����|dd�}	t|��\}}n�#tj$r�	t|��\}}n�#tj$r�}	t|��\}}|j
�t	jd
����n:#tj$r(t	jd�|�����wxYwYd}~nd}~wwxYwYnwxYw|�|��|r|dd
kr|dd�}n,|j
�t	jd����|�td
d����|r6|dtvr't|��\}}|�|��||fS)Nrr5zexpected 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-rightr6z
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�r�r�r�rr�r1r�rrrrrorWr*)r�msg_idrF�es    r�
get_msg_idr[s"���
�W�W�F����q��[�(��������u��
�
�e�����<�E�!�H��O�<��%�,�3�3�E�:�:�<�<�	<�
�M�M�-��^�4�4�5�5�5��!�"�"�I�E�1�(��/�/���u�u���"�	1�	1�	1�	1�-�e�4�4�L�E�5��N�!�!�&�"=�,�#.�#.�
/�
/�
/�
/���&�	1�	1�	1��)�"�"(�&��-�-�1�1�
1�	1����
/�
/�		1�����M�M�%�����	�E�!�H��O�	�����f�8�%�'�'�	(�	(�	(�
�	�U�1�X��_�	��M�M�-��\�:�:�;�;�;��!�"�"�I�E��u�}��
�M�M�-��%8�9�9�:�:�:��!�"�"�I�E�
5�(��/�/���u�u���"�5�5�5�
	5�.�u�5�5�L�E�5�5���&�	5�	5�	5�
5�)�%�0�0���u���%�%�f�&A�1�'3�'3�4�4�4�4���*�
5�
5�
5��-�&�&,�f�U�m�m�5�5�5�
5����4�4�4�4�4�����	5������5�����M�M�%�����/��q��S��/��a�b�b�	�������f�8�,�.�.�	/�	/�	/�
�M�M�-��\�2�2�3�3�3����q��[�(��������u��
�
�e�����5�=�sx�+B>�>E
�>D
�E
�
7E�E
�	E
�	H�K�,H?�>K�?K�>J�
K
�7K�K
�K�
K�K�Kc���	t��}	t|��\}}|�|��|r?|j�t	jd�|������ny#tj$rg}t|��}t|��}|j�t	jd�|������Yd}~nd}~wwxYw|S)NzUnexpected {!r}zInvalid msg-id: {!r})
r�r[r�rrror1r�r�r�)r�
message_idrF�exs    r�parse_message_idr_Is#������J�2�!�%�(�(���u����%� � � ��	2���%�%�f�&@�!�(�(��/�/�'1�'1�
2�
2�
2����"�K�K�K� ��'�'��%�e�,�,�
���!�!��&�'=�'D�'D�R�'H�'H�I�I�	K�	K�	K�	K�	K�	K�	K�	K�����K�����s�'A:�:C0�	AC+�+C0c��	t��}|s.|j�tjd����|S|dt
vrUt
|��\}}|�|��|s,|j�tjd����d}|rM|ddkrA|dt
vr2||dz
}|dd�}|r|ddkr|dt
v�2|���sc|j�tjd�	|������|�t|d����n7t|��|_|�t|d	����|r6|dt
vr't
|��\}}|�|��|r|ddkrZ|j�,|j�tjd
����|r#|�t|d����|S|�tdd����|dd�}|r6|dt
vr't
|��\}}|�|��|s5|j�,|j�tjd
����|Sd}|r5|dt
vr&||dz
}|dd�}|r|dt
v�&|���sc|j�tjd�	|������|�t|d����n7t|��|_
|�t|d	����|r6|dt
vr't
|��\}}|�|��|rO|j�tjd
����|�t|d����|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr"r	r�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)rGrr�r�HeaderMissingRequiredValuer�r��isdigitror1r��intrHrI)r�mime_versionrFras    r�parse_mime_versionrfes����
�=�=�L�����#�#�F�$E�3�%5�%5�	6�	6�	6����Q�x�;��E�������u����E�"�"�"��	E�� �'�'��(I�B�)D�)D�
E�
E�
E�
�F�
��E�!�H��O���a���(C���%��(����a�b�b�	����E�!�H��O���a���(C���>�>���=���#�#�F�$>�?�F�F�v�N�N�%P�%P�	Q�	Q�	Q����M�&�'�:�:�;�;�;�;� ��[�[������M�&�(�;�;�<�<�<��#��q��[�(�#�������u����E�"�"�"���E�!�H��O����	E�� �'�'��(B�B�)D�)D�
E�
E�
E��	?����
�e�W� =� =�>�>�>������
�c�+>�?�?�@�@�@��!�"�"�I�E��#��q��[�(�#�������u����E�"�"�"�����	E�� �'�'��(B�B�)D�)D�
E�
E�
E���
�F�
��E�!�H�K�/���%��(����a�b�b�	����E�!�H�K�/���>�>���=���#�#�F�$>�?�F�F�v�N�N�%P�%P�	Q�	Q�	Q����M�&�'�:�:�;�;�;�;� ��[�[������M�&�(�;�;�<�<�<��#��q��[�(�#�������u����E�"�"�"��;���#�#�F�$>�5�%7�%7�	8�	8�	8����M�%��9�9�:�:�:��rc�4�	t��}|r�|ddkrx|dtvr4|�t|dd����|dd�}n't	|��\}}|�|��|r|ddk�x||fS)NrrGrr�)rVrr�r�r)r�invalid_parameterrFs   r�get_invalid_parameterri�s����)�*�*��
�,�E�!�H��O�,���8�{�"�	,��$�$�]�5��8�3F�&H�&H�
I�
I�
I��!�"�"�I�E�E�%�e�,�,�L�E�5��$�$�U�+�+�+��,�E�!�H��O�,��e�#�#rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nzexpected ttext but found '{}'�ttext)�_non_token_end_matcherrr�r1r�r�r�r�)rr�rks   r�	get_ttextrm�s����	�u�%�%�A��;��%�+�2�2�5�9�9�;�;�	;�
�G�G�I�I�E��#�e�*�*�+�+��E��%��)�)�E��E�����%�<�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS�Nrzexpected token but found '{}')	r�r�r�r��
TOKEN_ENDSrr�r1rm)r�mtokenrFs   r�	get_tokenrr�s�����W�W�F����q��[�(��������u��
�
�e�����;��q��Z�'�;��%�+�2�2�5�9�9�;�;�	;��U�#�#�L�E�5�
�M�M�%�������q��[�(��������u��
�
�e�����5�=�rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nz expected attrtext but found {!r}r\)�_non_attribute_end_matcherrr�r1r�r�r�r��rr�r\s   r�get_attrtextrv�s����	#�5�)�)�A��>��%�.�5�5�e�<�<�>�>�	>��w�w�y�y�H��#�h�-�-�.�.�!�E��X�z�2�2�H��H�����U�?�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSro)	rYr�r�r��ATTRIBUTE_ENDSrr�r1rv�rrZrFs   r�
get_attributerz�s�������I�� ��q��[�(� �������u���������;��q��^�+�;��%�+�2�2�5�9�9�;�;�	;���&�&�L�E�5�
���U����� ��q��[�(� �������u���������e��rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nz)expected extended attrtext but found {!r}�extended-attrtext)�#_non_extended_attribute_end_matcherrr�r1r�r�r�r�rus   r�get_extended_attrtextr~	s����	,�E�2�2�A��G��%�7�>�>�u�E�E�G�G�	G��w�w�y�y�H��#�h�-�-�.�.�!�E��X�':�;�;�H��H�����U�?�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSro)	rYr�r�r��EXTENDED_ATTRIBUTE_ENDSrr�r1r~rys   r�get_extended_attributer�!	s�������I�� ��q��[�(� �������u���������;��q��4�4�;��%�+�2�2�5�9�9�;�;�	;�(��/�/�L�E�5�
���U����� ��q��[�(� �������u���������e��rc��	t��}|r|ddkr'tjd�|�����|�tdd����|dd�}|r|d���s'tjd�|�����d}|rK|d���r1||dz
}|dd�}|r|d����1|ddkr2|dkr,|j�tjd	����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 0ra)r`rr�r1r�r�rcrrordrP)rraras   r�get_sectionr�7	s�����i�i�G��0�E�!�H��O�0��%�&E�&L�&L�(-�'/�'/�0�0�	0��N�N�=��&6�7�7�8�8�8��!�"�"�I�E��@��a��(�(�*�*�@��%�'1�17�����@�@�	@�
�F�
��E�!�H�$�$�&�&���%��(����a�b�b�	����E�!�H�$�$�&�&���a�y�C��<�F�c�M�<�����v�9�9� ;� ;�	<�	<�	<���[�[�G�N��N�N�=���2�2�3�3�3��E�>�rc��	t��}|stjd���d}|dtvrt	|��\}}|s'tjd�|�����|ddkrt
|��\}}nt|��\}}|�|g|dd�<|�|��||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r)	rcrr�r�r�r1rr�r�)r�vrrFs    r�	get_valuer�U	s����	���A��P��%�&N�O�O�O�
�F��Q�x�;��(� ����
����@��%�'0�06��v���@�@�	@��Q�x�3��5�(��/�/���u�u�-�e�4�4���u�
���H��b�q�b�	��H�H�U�O�O�O��e�8�Orc�T�	t��}t|��\}}|�|��|r|ddkrC|j�t	jd�|������||fS|ddkr�	t|��\}}d|_|�|��n#tj	$rYnwxYw|st	j	d���|ddkr4|�tdd����|dd�}d|_|dd	krt	j	d
���|�td	d����|dd�}d}|r6|dtvr't|��\}}|�|��d}|}|j�r|�r|ddk�rt|��\}}|j}d
}|jdkr4|r|ddkrd}nBt#|��\}}	|	r|	ddkrd}n	t%|��\}}	|	sd}n#YnxYw|r_|j�t	jd����|�|��|D]}
|
jdkrg|
dd�<|
}n�|}n.d}|j�t	jd����|r|ddkrd}nt)|��\}}|jr|jdkrW|r|ddkr|�|��|�|}||fS|j�t	jd����|sI|j�t	jd����|�|��|�||fS�nC|�>|D]}
|
jdkrn�|
jdk|�|
��|
j|_|ddkr't	j	d�|�����|�tdd����|dd�}|rt|ddkrht#|��\}}|�|��|j|_|r|ddkr't	j	d�|�����|�tdd����|dd�}|��t1��}|rr|dt2vrt5|��\}}n9|ddkrtdd��}|dd�}nt7|��\}}|�|��|�r|}nt)|��\}}|�|��|�|}||fS)NrrGz)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 {}�DQUOTE)rKrzr�rrror1r�rOr�r�rTr�r�rr�rQrvr~rXr�rr�r�rcr�r�r�)rrrFrr��appendto�qstring�inner_value�
semi_validr��tr�s            r�
get_parameterr�k	s����
�K�K�E� ��'�'�L�E�5�	�L�L�������E�!�H��O��
�
���V�7�9%�%+�V�E�]�]�4�4�	5�	5�	5��e�|���Q�x�3��"�	�&�u�-�-�L�E�5�"�E�O��L�L��������&�	�	�	��D�	�����	B��)�*@�A�A�A���8�s�?�	"��L�L��s�,G�H�H�I�I�I��!�"�"�I�E�!�E�N��Q�x�3��G��%�&E�F�F�F�	�L�L��s�$9�:�:�;�;�;��!�"�"�I�E�
�F����q��[�(��������u�
���U�����I��H��~�$<�%�$<�E�!�H��O�$<�/�u�5�5�����,���
���1�$�	&��
&�{�1�~��4�
&�!�
�
�*�;�7�7���t��&�D��G�s�N�&�!%�J��
&�3�K�@�@���t��&�!%�J���	
�������	<��M� � ��!;�G�"I�"I�
J�
J�
J��L�L��!�!�!��
�
���<�#7�7���A�a�a�a�D� �H��E�� �E�E��I��M� � ��!;�:�";�";�
<�
<�
<�
�(��q��S��(���� ��'�'���u��>�	F�U�1�A�5�	F��	 ��a��C��	 ��O�O�E�"�"�"��
"�!���%�<��
�
���V�7�
D�E�E�	F�	F�	F���
�
���V�7�6�8�8�	9�	9�	9���������	 ��%�<��	 ��	$��
�
���<�#6�6���E��
�L�J�&�&��O�O�A�����G�E�M���8�s�?�	U��)�+F�FL�f�U�m�m�U�U�
U����
�c�+>�?�?�@�@�@��a�b�b�	���	K�U�1�X��_�	K�'��.�.�L�E�5��O�O�E�"�"�"���E�J��
K�E�!�H��O�
K��-�/<�<B�F�5�M�M�K�K�K����
�c�+>�?�?�@�@�@��a�b�b�	���(��G�G���	��Q�x�3��
3�&�u�~�~���u�u��q��S��
3�%�c�8�4�4���a�b�b�	���+�E�2�2���u�
�H�H�U�O�O�O��	���� ��'�'���u��O�O�E���������%�<�s�.C�C�C�-I�Ic�$�	t��}|�r�	t|��\}}|�|���n#tj$�r}d}|dt
vrt
|��\}}|s|�|��|cYd}~S|ddkrD|�|�|��|j�tjd����npt|��\}}|r|g|dd�<|�|��|j�tjd�
|������Yd}~nd}~wwxYw|r�|ddkru|d}d|_t|��\}}|�|��|j�tjd�
|������|r-|�tdd����|d	d�}|���|S)
NrrGzparameter entry with no contentzinvalid parameter {!r}r�rWz)parameter with invalid trailing text {!r}r�r�)rfr�r�rr�r�r�rrorir1rXrDr�)r�mime_parametersrFrSrrs      r�parse_mime_parametersr��	sw���%�&�&�O�
�#�	=�(��/�/�L�E�5��"�"�5�)�)�)�)���&�	=�	=�	=��F��Q�x�;�&�
0� (����
����
'��&�&�v�.�.�.�&�&�&�&�&�&�&��Q�x�3��
=��3�#�*�*�6�2�2�2��'�.�.�v�/I�5�07�07�8�8�8�8� 5�U�;�;���u��)�!'��E�"�1�"�I��&�&�u�-�-�-��'�.�.�v�/I�,�3�3�E�:�:�0<�0<�=�=�=����������#	=����&�	L�U�1�X��_�	L�$�B�'�E�2�E��0��7�7�L�E�5��L�L������#�*�*�6�+E�;�B�B�5�I�I�,K�,K�
L�
L�
L��	��"�"�=��6K�#L�#L�M�M�M��!�"�"�I�E�G�#�H�s"�'=�E�
;E�E�CE�Ec��	|r�|ddkrx|dtvr4|�t|dd����|dd�}n't|��\}}|�|��|r|ddk�x|sdS|�tdd����|�t	|dd�����dS)NrrGrr�r�)rr�r�rr�)�	tokenlistrrFs   r�_find_mime_parametersr�-
s�����$�E�!�H��O�$���8�{�"�	$����]�5��8�5H�I�I�J�J�J��!�"�"�I�E�E�%�e�,�,�L�E�5����U�#�#�#�
�$�E�!�H��O�$�����
���]�3�(=�>�>�?�?�?�
���*�5����9�5�5�6�6�6�6�6rc���	t��}d}|s.|j�tjd����|S	t|��\}}nf#tj$rT|j�tjd�|������t||��|cYSwxYw|�|��|r|ddkr@|j�tjd����|rt||��|S|j
������|_
|�tdd����|dd�}	t|��\}}nf#tj$rT|j�tjd	�|������t||��|cYSwxYw|�|��|j
������|_|s|S|dd
krU|j�tjd�|������|`
|`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}rGz<Only parameters are valid after content type, but found {!r}r�)r�rr�rrbrrr�ror1r�rrl�lowerr�r�r�r�)r�ctype�recoverrFs    r�parse_content_type_headerr�=
s���
�M�M�E��G���
�
���V�>�0�2�2�	3�	3�	3���� ��'�'���u�u���"����
�
���V�7�6�=�=�e�D�D�F�F�	G�	G�	G��e�U�+�+�+�����	����

�L�L�������E�!�H��O��
�
���V�7�"�$�$�	%�	%�	%��	0�!�%��/�/�/����[�&�&�(�(�.�.�0�0�E�N�	�L�L��s�$<�=�=�>�>�>��!�"�"�I�E�� ��'�'���u�u���"����
�
���V�7�5�<�<�U�C�C�E�E�	F�	F�	F��e�U�+�+�+�����	����

�L�L������K�%�%�'�'�-�-�/�/�E�M������Q�x�3��	�
�
���V�7�
������(�(�	)�	)�	)�
�N�E�M��e�U�+�+�+���	�L�L��s�$9�:�:�;�;�;�	�L�L�&�u�Q�R�R�y�1�1�2�2�2��Ls&�A�A B9�8B9�=F�A G3�2G3c�^�	t��}|s.|j�tjd����|S	t|��\}}nf#tj$rT|j�tjd�|������t||��|cYSwxYw|�|��|j
������|_
|s|S|ddkrQ|j�tjd�|������t||��|S|�tdd����|�t|dd�����|S)NzMissing content dispositionz+Expected content disposition but found {!r}rrGzCOnly parameters are valid after content disposition, but found {!r}r�r�)r�rr�rrbrrr�ror1r�rrlr�r�r�r�)r�disp_headerrFs   r� parse_content_disposition_headerr�v
s����%�&�&�K�����"�"�6�#D�)�$+�$+�	,�	,�	,���� ��'�'���u�u���"������"�"�6�#=�9�@�@��G�G�$I�$I�	J�	J�	J��k�5�1�1�1�����	����
���u����&+�k�&7�&7�&9�&9�&?�&?�&A�&A�K�#������Q�x�3�����"�"�6�#=�
������$(�$(�	)�	)�	)�	�k�5�1�1�1������}�S�*?�@�@�A�A�A����,�U�1�2�2�Y�7�7�8�8�8��s�A�A B7�6B7c��	t��}|s.|j�tjd����|S	t|��\}}|�|��|j������|_	nT#tj
$rB|j�tjd�|������YnwxYw|s|S|r�|j�tjd����|dtvr4|�t|dd����|dd�}n't|��\}}|�|��|��|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrrr�)r�rr�rrbrrrrlr�r�r�ror1rr�r)r�
cte_headerrFs   r�&parse_content_transfer_encoding_headerr��
s����)�*�*�J�����!�!�&�"C�/�#1�#1�	2�	2�	2���5� ��'�'���u�
	���%� � � ���*�*�,�,�2�2�4�4�
�����"�P�P�P���!�!�&�"<�?�F�F�u�M�M�#O�#O�	P�	P�	P�	P�	P�P��������
�%���!�!�&�"<�8�#:�#:�	;�	;�	;���8�{�"�	%����m�E�!�H�6I�J�J�K�K�K��!�"�"�I�E�E�%�e�,�,�L�E�5����e�$�$�$��%��s�B�AC*�)C*c��d}|r>|dr6|ddtvr!|dd}|ddd�|d<|S)Nr"r�)r�)�lines�wsps  r�_steal_trailing_WSP_if_existsr��
sU��
�C��#��r��#�u�R�y��}��3�#��B�i��m���"�I�c�r�c�N��b�	��Jrc���	|jptj}|jrdnd}dg}d}d}d}t	dd��}t|��}	|	�r|	�d��}
|
|ur|dz}�"t|
��}|
jdkrt|��tzrd	}	|�|��|}n5#t$r(td
�|
jD����rd}nd}d	}YnwxYw|
jdkrt|
|||����|r�|s�|
js�d}d}|
jr�|
�|�
��dt'|j���}
|j|
vr_t'|
��|t'|d��z
kr$t+|��}|�|��|dxx|
z
cc<��pt/|
d��st|
��|	z}	nt1|||||
j|��}d}���t'|��|t'|d��z
kr|dxx|z
cc<���|
jrWt'|��dz|krAt+|��}|s|
���r|�||z��d}��It/|
d��s7t|
��}|
js|dz
}|�|��||	z}	���|
jr|s|	�d|
��d	}���t+|��}|s|
���r|�||z��n|dxx|z
cc<|	��|j�|��|jzS)N�utf-8rMr"rF�wrap_as_ew_blockedr�rDTc3�JK�|]}t|tj��V��dSr)r;rrwr%s  rr(z%_refold_parse_tree.<locals>.<genexpr>�
sC����.�.���a��!>�?�?�.�.�.�.�.�.r�unknown-8bitrgrHr�r)�max_line_length�sys�maxsize�utf8r�r�r1rrXr(r
rrur@r9�_fold_mime_parametersr@r^rLr�r�r�r�rY�_fold_as_ewr_r=�insertr+)�
parse_treerI�maxlenrkr��last_ewr��
want_encoding�end_ew_not_allowedr{rA�tstrr��encoded_part�newline�newpartss                rrJrJ�
s2����
#�
2�s�{�F� �+�5�w�w�:�H�
�D�E��G����M�!�"�&:�;�;������E�
�W��y�y��|�|���%�%�	��!�#����4�y�y���?�g�%�	!�#�d�)�)�h�*>�	!� �M�	!��K�K��!�!�!��G�G��!�	!�	!�	!��.�.� �,�.�.�.�.�.�
"�(���"�� �M�M�M�	!�����?�/�/�	�!�$��v�x�@�@�@���	�!3�	��%�

!� %�
����'�
!�#'�9�9�F�9�#;�#;�<Q�c�&�.�>Q�>Q�=Q�<Q�#R�L��~�\�9�!��|�,�,�v��E�"�I���/F�F�2�&C�E�&J�&J�G�!�L�L��1�1�1��b�	�	�	�\�1�	�	�	� �
�4��*�*�
H��T�
�
�U�*���&�d�E�6�7�&*�&=�w�H�H��!�M���t�9�9���U�2�Y���/�/�	��"�I�I�I���I�I�I��
� �	��D�	�	�A�
��'�	�3�E�:�:�G��
�$�-�-�/�/�
����W�t�^�,�,�,�����t�X�&�&�	��D�z�z�H��%�
4�"�a�'�"���� 2�3�3�3��u�$�E����	�&8�	�
�L�L��D�!�!�!� �M��/��6�6���	�d�)�)�+�+�	��L�L��4��(�(�(�(�
�"�I�I�I���I�I�I�o�W�p�>���u�%�%���6�6s�B6�6/C(�'C(c�z�	|�B|r@tt|d|d�|z����}|dd|�|d<|dtvr]|d}|dd�}t|d��|kr"|�t|����|dxx|z
cc<d}|dtvr|d}|dd�}|�t|d��n|}|dkrdn|}	t|	��dz}
|
dz|krt
jd���|r�|t|d��z
}||
z
}|dkr|�d	���;|d|�}
tj	|
|	�
��}t|��|z
}|dkr8|
dd�}
tj	|
|	�
��}t|��|z
}|dk�8|dxx|z
cc<|t|
��d�}|r*|�d	��t|d��}|��|dxx|z
cc<|r|ndS)Nr�rr�r"rMr��z3max_line_length is too small to fit an encoded wordrg)r�)
rr�r�r�r�r�rr�r�r)�	to_encoder�r�r�r_r��leading_wsp�trailing_wsp�new_last_ew�	encode_as�
chrome_len�remaining_space�
text_space�to_encode_word�encoded_word�excesss                rr�r�1s���	��(�1�(���U�2�Y�w�x�x�0�9�<�=�=�?�?�	��"�I�h�w�h�'��b�	���|�s��!� ��l���a�b�b�M�	���b�	�N�N�f�$�	?��L�L�6�u�=�=�>�>�>�
�b�	�	�	�[� �	�	�	��L���}���#� ��}���c�r�c�N�	�$+�@�#�e�B�i�.�.�.��K�"�j�0�=���g�I��Y���!�#�J��Q��6�!�C��%�A�C�C�	C��)� �3�u�R�y�>�>�1��$�z�1�
���?�	��L�L������"�;�J�;�/���z�.�)�D�D�D���\�"�"�_�4���q�j�	9�,�C�R�C�0�N��:�n�i�H�H�H�L���&�&��8�F��q�j�	9�	�b�	�	�	�\�!�	�	�	��c�.�1�1�2�2�3�	��	)��L�L������e�B�i�.�.�K�+�)�,
�"�I�I�I���I�I�I�,�6�;�;�$�6rc	��	|jD�]O\}}|d����d��s|dxxdz
cc<|}d}	|�|��d}n-#t$r d}tj|��rd}d}nd}YnwxYw|r:tj�	|d	|�
��}	d�
|||	��}
n#d�
|t|����}
t|d��t|
��zd
z|kr|ddz|
z|d<��+t|
��dz|kr|�
d|
z����[d}|dz}|r�t|��tt|����zdzt|��z}
||
dzkrd}||
z
dz
x}}	|d|�}tj�	|d	|�
��}	t|	��|krn|d
z}�F|�
d�
||||	����d	}|d
z
}||d�}|r|dxxdz
cc<|���QdS)Nr�rG�strictFTr�rjr�r")�saferz
{}*={}''{}r�r�rgr�rz''r"�Nz {}*{}*={}{})ryr$r]rrurrvrprqr�r1rr�r�r)rAr�r�rkrzrr��
error_handler�encoding_required�
encoded_valuer�ra�extra_chromer��
splitpoint�maxchars�partials                 rr�r�rs�����{�:!�:!���e��R�y���!�!�*�*�3�/�/�	��"�I�I�I���I�I�I��� �
�		"��L�L��"�"�"� %����!�	"�	"�	"� $���$�U�+�+�
"�(�� 1�
�
�!����
	"�����	=�"�L�.�.��B�}�/�6�6�M��&�&�t�W�m�D�D�D�D��>�>�$��U�(;�(;�<�<�D��u�R�y�>�>�C��I�I�%��)�F�2�	��b�	�C��$�.�E�"�I��
��Y�Y��]�f�
$�	��L�L��t��$�$�$������~���	!��T���S��W���%6�%6�6��:�S��=N�=N�N�J���a��'�
�
��$*�Z�$7�!�$;�;�J��
 �����,�� &�� 2� 2��"�]�!3�!<�!<�
��}�%�%��1����a��
�

 �
�L�L��.�.��g�|�]�<�<�
=�
=�
=��L��q�L�G��*�+�+�&�E��
!��b�	�	�	�S� �	�	�	�-�	!��I:!�:!s�A)�)'B�B)��rer�rp�stringr�operatorr�emailrr�rrr(r�r�r
rr)r�	TSPECIALSrp�	ASPECIALSrxr�r�compile�VERBOSE�	MULTILINEr�r�rrdrprtrxr|rr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr-r/r6rArGrKrVrYr`rcrfr�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r:r0r1r1r+rr�r��matchr��findallr�rlrtr}r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr r%r(r*r-r3r8r:r=rArErIrLrNrPrTrWr[r_rfrirmrrrvrzr~r�r�r�r�r�r�r�r�r�r�rJr�r�rhrr�<module>r�sa��C�J
�	�	�	�
�
�
�
�
�
�
�
�������������'�'�'�'�'�'�������������
�c�%�j�j���C�C��H�H�n���3�� � ���s�N�	��C�C��H�H�$�
����U���#��
���E�
�
�
"�c�c�#�h�h�.�	�
��_�
����E�
�
�"�	��S���(�3�3�s�8�8�3��H�H�H��"�*���Z�"�,�� � ��@,�@,�@,�@,�@,��@,�@,�@,�FD�D�D�D�D�)�D�D�D� � � � � �I� � � ������Y���������9���������"���������9���������I����
�����)����#�#�#�#�#�9�#�#�#�6	-�	-�	-�	-�	-�|�	-�	-�	-������!����4C�C�C�C�C�)�C�C�C�&%�%�%�%�%�i�%�%�%�2?�?�?�?�?�)�?�?�?�%�%�%�%�%�	�%�%�%�"$�$�$�$�$�I�$�$�$�*"�"�"�"�"�y�"�"�"�6�����	����DD�D�D�D�D�y�D�D�D�!�!�!�!�!�i�!�!�!�6;�;�;�;�;�Y�;�;�;�.�.�.�.�.�Y�.�.�.������i���������)����
�����I����
�����y����B�����9����'!�'!�'!�'!�'!�&�'!�'!�'!�T!�!�!�!�!�	�!�!�!�H
�
�
�
�
�I�
�
�
� �����)���������	����8%�%�%�%�%�y�%�%�%�
#�#�#�#�#�	�#�#�#������i���������I����S.�S.�S.�S.�S.�Y�S.�S.�S.�l�����y���������*���������1���������i���������)����
*�*�*�*�*�I�*�*�*����������&�&�&�&�&�y�&�&�&������Y����(+�(+�(+�(+�(+�s�(+�(+�(+�V��������������H���������-����<�<�<�<�<�f�-�<�<�<��m�C������
�c�#3�4�4�
�$�}�S�*B�C�C��.��
�:�,�,�R�W�W�S�\�\�:�:�;�;�A�
�"��
�9�#3�#3�
�B�I�b�g�g�i� � �!�!�$#�$#�$�$�$)��"��
�#5�6�6�>��#���I�$4�$4�
�B�I�b�g�g�j�!�!�"�"�%$�%$�%�%�%*��'�R�Z�	�(8�(8�
�B�I�b�g�g�n�%�%�&�&�)(�)(�)�)�).��&0�b�j��1A�1A�
�B�I�b�g�g�-�.�.�/�/�21�21�'2�'2�27�$�;�;�;�J�J�J�<
�
�
�/�/�/�bA�A�A�F���"
�
�
���� ))�))�))�V���2��� � � �$���6 � � �&���2 � � �D$�$�$�L%�%�%�N-!�-!�-!�^���(���%!�%!�%!�N$�$�$�L��� ' �' �' �R,�,�,�\������<���*"�"�"�$6�6�6�r#�#�#�J���<���:4�4�4�n&�&�&�,B�B�B�J���8B�B�B�H$�$�$�$���&���.���&���.���$���,���<���,L�L�L�\2�2�2�h7�7�7� 7�7�7�r���<���^���e7�e7�e7�N?7�?7�?7�BI!�I!�I!�I!�I!r