a
    ze&                     @   sB  g d Z ddlZddlmZmZmZ dZdZdZdd e	d	D Z
e
dd Ze
dd Zd
ed ed D ]Zeeee< qrdeed< dD ]Zeeee< qdd Zdd Zdd Zdd Zd*ddZdd Zdd Zd+ddZedd Zd D ]Zeeee< qd!efd"d#Zefd$d%ZeZeZd&d' Zd(d) ZdS ),)
body_decodebody_encodebody_lengthdecodedecodestringheader_decodeheader_encodeheader_lengthquoteunquote    N)ascii_lettersdigits	hexdigits

 c                 C   s   g | ]}d | qS )z=%02X ).0cr   r   &/usr/lib/python3.9/email/quoprimime.py
<listcomp>7       r      s   -!*+/ascii_ s_    !"#$%&'()*+,-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	c                 C   s   t | t|  kS N)chr_QUOPRI_HEADER_MAPoctetr   r   r   header_checkJ   s    r!   c                 C   s   t | t|  kS r   )r   _QUOPRI_BODY_MAPr   r   r   r   
body_checkO   s    r#   c                 C   s   t dd | D S )Nc                 s   s   | ]}t t| V  qd S r   )lenr   r   r    r   r   r   	<genexpr>^   r   z header_length.<locals>.<genexpr>sum	bytearrayr   r   r   r   T   s    
r   c                 C   s   t dd | D S )Nc                 s   s   | ]}t t| V  qd S r   )r$   r"   r%   r   r   r   r&   h   r   zbody_length.<locals>.<genexpr>r'   r)   r   r   r   r   a   s    r   c                 C   sf   t |tst|}| s&| |  n<t| d t| |krT| d  || 7  < n| |  d S )N)
isinstancestrr   appendlstripr$   )Lsmaxlenextrar   r   r   _max_appendk   s    
r4   c                 C   s   t t| dd dS )N         )r   intr1   r   r   r   r
   v   s    r
   c                 C   s   t t|  S r   )_QUOPRI_MAPord)r   r   r   r   r	   {   s    r	   
iso-8859-1c                 C   s$   | sdS |  dt}d||f S )Nr   latin1z=?%s?q?%s?=)r   	translater   )Zheader_bytescharsetencodedr   r   r   r      s    r   s   
L   c                 C   s  |dk rt d| s| S | t} d| }|d }g }|j}|  D ]}d}t|d | }	||	kr|| }
||
d  dkr||||
d   |
d }q^||
d  dkr||||
  |
d }q^||||
 d  |
}q^|rR|d dv rR||	 }|d	krt|d }n(|dkr,|d | }n|t|d  }|||d |  qD|||d   qD| d tv rz|d
 ||S )N   zmaxlinelen must be at least 4=r5   r      r+   z 	r6   r   )	
ValueErrorr>   _QUOPRI_BODY_ENCODE_MAPr.   
splitlinesr$   r	   CRLFjoin)bodyZ
maxlineleneolZ
soft_breakZmaxlinelen1Zencoded_bodyr.   linestartZ	laststartstopZroomqr   r   r   r      sD    




r   c                 C   s  | s| S d}|   D ]}| }|s.||7 }qd}t|}||k r|| }|dkrd||7 }|d7 }nv|d |kr||d7 }q:n^|d |k r||d  tv r||d  tv r|t|||d  7 }|d7 }n||7 }|d7 }||kr:||7 }q:q| d dvr||r|d d }|S )	Nr   r   rC   r5   rD   r6   r+   r   )rG   rstripr$   r   r
   endswith)r@   rK   ZdecodedrL   inr   r   r   r   r      s8    
,
r   c                 C   s   |  d}t|S )Nr   )groupr
   )matchr1   r   r   r   _unquote_match  s    
rV   c                 C   s    |  dd} tjdt| tjdS )Nr   r   z=[a-fA-F0-9]{2})flags)replaceresubrV   ASCIIr9   r   r   r   r   #  s    r   )r   )r<   ) __all__rY   stringr   r   r   rH   NLZEMPTYSTRINGranger:   r   r"   encoder   r   r;   r!   r#   r   r   r4   r
   r	   r   rF   r   r   r   r   rV   r   r   r   r   r   <module>   s<   


O0