<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

YfD                 @   sx  d  Z  d d d d g Z d d l Z d d l Z d Z d Z d	 Z d
 d d d d d d d d d d d d d d d d d d d d d d d  g Z d! d" d# d$ d% d& d' g Z d( d d) d d* d d+ d d, d- d. d/ d0 d1 d2 d- d3 d4 d5 d1 d6 d7 d8 d4 d9 d: d; d7 i Z	 d< d   Z
 d= d>   Z d? d   Z d@ d   Z dA d   Z GdB dC   dC  Z GdD dE   dE e  Z d S)FzcEmail address parsing code.

Lifted directly from rfc822.py.  This should eventually be rewritten.
	mktime_tz	parsedateparsedate_tzquote    N  z, ZjanZfebZmarZaprZmayZjunZjulZaugsepoctZnovZdecZjanuaryZfebruaryZmarchZaprilZjuneZjulyZaugustZ	septemberZoctoberZnovemberZdecemberZmonZtueZwedZthuZfriZsatZsunZUTZUTCZGMTZZASTi  ZADTi,  ZESTi  ZEDTZCSTiX  ZCDTZMSTi  ZMDTZPSTi   ZPDTc             C   s:   t  |   } | s d S| d d k r0 d | d <t |  S)zQConvert a date string to a time tuple.

    Accounts for military timezones.
    N	   r   )_parsedate_tztuple)datares r   5/opt/alt/python35/lib64/python3.5/email/_parseaddr.pyr   -   s    
c             C   s  |  s
 d S|  j    }  |  d j d  s? |  d j   t k rI |  d =n; |  d j d  } | d k r |  d | d d  |  d <t |   d k r |  d j  d  } t |  d k r | |  d d  }  t |   d k r[|  d } | j d  } | d k r| j d  } | d k rN| d |  | | d  g |  d d  <n |  j d	  t |   d
 k  rqd S|  d d
  }  |  \ } } } } } | j   } | t k r| | j   } } | t k rd St j	 |  d } | d k r| d 8} | d d k r| d d  } | j d  } | d k rB| | } } | d d k rb| d d  } | d j
   s| | } } | d d k r| d d  } | j  d  } t |  d k r| \ }	 }
 d } n t |  d k r| \ }	 }
 } n t |  d k ryd | d k ry| d j  d  } t |  d k rU| \ }	 }
 d } q}t |  d k r}| \ }	 }
 } n d Sy@ t |  } t |  } t |	  }	 t |
  }
 t |  } Wn t k
 rd SYn X| d k  r| d k r| d 7} n
 | d 7} d } | j   } | t k r0t | } nF y t |  } Wn t k
 rTYn X| d k rv| j d  rvd } | r| d k  rd } | } n d } | | d d | d d } | | | |	 |
 | d d d | g
 S)a  Convert date to extended time tuple.

    The last (additional) element is the time zone offset in seconds, except if
    the timezone was specified as -0000.  In that case the last element is
    None.  This indicates a UTC timestamp that explicitly declaims knowledge of
    the source timezone, as opposed to a +0000 timestamp that indicates the
    source timezone really was UTC.

    Nr   ,      -   +r         :   0.d   D   il  i  i  <   r!   r!   r!   r!   r!   r!   r!   r!   )splitendswithlower	_daynamesrfindlenfindappend_monthnamesindexisdigitint
ValueErrorupper
_timezones
startswith)r   iZstuffsZddZmmZyyZtmZtzZthhZtmmZtssZtzoffsetZtzsignr   r   r   r   9   s    
)

-
	"		

r   c             C   s1   t  |   } t | t  r) | d d  S| Sd S)z&Convert a time string to a time tuple.Nr   )r   
isinstancer   )r   tr   r   r   r      s    c             C   sJ   |  d d k r+ t  j |  d d  d  St j |   } | |  d Sd S)zETurn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.r   N   r   r!   )r!   )timeZmktimecalendarZtimegm)r   r5   r   r   r   r      s    c             C   s   |  j  d d  j  d d  S)zPrepare string to be used in a quoted string.

    Turns backslash and double quote characters into quoted pairs.  These
    are the only characters that need to be quoted inside a quoted string.
    Does not add the surrounding double quotes.
    \z\\"z\")replace)strr   r   r   r      s    c               @   s   e  Z d  Z 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 d  Z d d   Z d d   Z d d   Z d d d  Z d d   Z d S)AddrlistClassa  Address parser class by Ben Escoto.

    To understand what this class does, it helps to have a copy of RFC 2822 in
    front of you.

    Note: this class interface is deprecated and may be removed in the future.
    Use email.utils.AddressList instead.
    c             C   s   d |  _  d |  _ d |  _ d |  _ |  j |  j |  _ |  j  |  j |  j |  _ |  j j d d  |  _ | |  _ g  |  _	 d S)zInitialize a new instance.

        `field' is an unparsed address header field, containing
        one or more addresses.
        z()<>@,:;."[]r   z 	z
r   r   N)
specialsposLWSZCRFWSatomendsr;   
phraseendsfieldcommentlist)selfrD   r   r   r   __init__   s    					zAddrlistClass.__init__c             C   s   g  } x |  j  t |  j  k  r |  j |  j  |  j d k r} |  j |  j  d k rk | j |  j |  j   |  j  d 7_  q	 |  j |  j  d k r |  j j |  j    q	 Pq	 Wt j |  S)z&Skip white space and extract comments.z
r   ()	r?   r'   rD   r@   r)   rE   
getcommentEMPTYSTRINGjoin)rF   Zwslistr   r   r   gotonext   s    zAddrlistClass.gotonextc             C   sU   g  } xH |  j  t |  j  k  rP |  j   } | r@ | | 7} q	 | j d  q	 W| S)zVParse all addresses.

        Returns a list containing all of the addresses.
        r   )r   r   )r?   r'   rD   
getaddressr)   )rF   resultZadr   r   r   getaddrlist   s    zAddrlistClass.getaddrlistc             C   s  g  |  _  |  j   |  j } |  j  } |  j   } |  j   g  } |  j t |  j  k r | rGt j |  j   | d f g } n|  j |  j d k r | |  _ | |  _  |  j   } t j |  j   | f g } nt|  j |  j d k r~g  } t |  j  } |  j d 7_ x7|  j t |  j  k  rz|  j   |  j | k  rg|  j |  j d k rg|  j d 7_ P| |  j	   } qWn |  j |  j d k r|  j
   } |  j  rt j |  d d j |  j   d	 | f g } qGt j |  | f g } nP | rt j |  j   | d f g } n( |  j |  j |  j k rG|  j d 7_ |  j   |  j t |  j  k  r|  j |  j d
 k r|  j d 7_ | S)zParse the next address.r   z.@r   r   ;<z (r   )r   )rE   rL   r?   getphraselistr'   rD   SPACErK   getaddrspecrM   getrouteaddrr>   )rF   ZoldposZoldclplistZ
returnlistZaddrspecZfieldlenZ	routeaddrr   r   r   rM     sL    	
		
"		
%	3"
.zAddrlistClass.getaddressc             C   s   |  j  |  j d k r d Sd } |  j d 7_ |  j   d } x |  j t |  j   k  r| rs |  j   d } n |  j  |  j d k r |  j d 7_ Pnr |  j  |  j d k r |  j d 7_ d } nD |  j  |  j d	 k r |  j d 7_ n |  j   } |  j d 7_ P|  j   qB W| S)
zParse a route address (Return-path value).

        This method just skips all the route stuff and returns the addrspec.
        rQ   NFr   r   >@Tr   )rD   r?   rL   r'   	getdomainrU   )rF   ZexpectrouteZadlistr   r   r   rV   ?  s.    

		zAddrlistClass.getrouteaddrc             C   s  g  } |  j    x*|  j t |  j  k  r<d } |  j |  j d k r | rh | d j   rh | j   | j d  |  j d 7_ d } n |  j |  j d k r | j d t |  j     nQ |  j |  j |  j	 k r| r | d	 j   r | j   Pn | j |  j
    |  j    } | r | r | j |  q W|  j t |  j  k sk|  j |  j d k rxt j |  S| j d  |  j d 7_ |  j    |  j   } | st St j |  | S)
zParse an RFC 2822 addr-spec.Tr   r   Fr:   z"%s"rY   r!   r!   )rL   r?   r'   rD   strippopr)   r   getquoterB   getatomrJ   rK   rZ   )rF   ZaslistZpreserve_wsZwsZdomainr   r   r   rU   _  s:    

	 
.
zAddrlistClass.getaddrspecc             C   s7  g  } x!|  j  t |  j  k  r)|  j |  j  |  j k rL |  j  d 7_  q	 |  j |  j  d k r{ |  j j |  j    q	 |  j |  j  d k r | j |  j    q	 |  j |  j  d k r |  j  d 7_  | j d  q	 |  j |  j  d k r t S|  j |  j  |  j	 k rPq	 | j |  j
    q	 Wt j |  S)z-Get the complete domain name from an address.r   rH   [r   rY   )r?   r'   rD   r@   rE   r)   rI   getdomainliteralrJ   rB   r^   rK   )rF   Zsdlistr   r   r   rZ     s"    zAddrlistClass.getdomainTc             C   s-  |  j  |  j | k r d Sd g } d } |  j d 7_ x |  j t |  j   k  r| ry | j |  j  |  j  d } n |  j  |  j | k r |  j d 7_ Pnk | r |  j  |  j d k r | j |  j    q; n6 |  j  |  j d k r d } n | j |  j  |  j  |  j d 7_ q; Wt j |  S)a  Parse a header fragment delimited by special characters.

        `beginchar' is the start character for the fragment.
        If self is not looking at an instance of `beginchar' then
        getdelimited returns the empty string.

        `endchars' is a sequence of allowable end-delimiting characters.
        Parsing stops when one of these is encountered.

        If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed
        within the parsed fragment.
        r   Fr   rH   r9   T)rD   r?   r'   r)   rI   rJ   rK   )rF   Z	begincharZendcharsZallowcommentsZslistr   r   r   r   getdelimited  s(    			zAddrlistClass.getdelimitedc             C   s   |  j  d d d  S)z1Get a quote-delimited fragment from self's field.r:   z"F)ra   )rF   r   r   r   r]     s    zAddrlistClass.getquotec             C   s   |  j  d d d  S)z7Get a parenthesis-delimited fragment from self's field.rH   z)T)ra   )rF   r   r   r   rI     s    zAddrlistClass.getcommentc             C   s   d |  j  d d d  S)z!Parse an RFC 2822 domain-literal.z[%s]r_   z]F)ra   )rF   r   r   r   r`     s    zAddrlistClass.getdomainliteralNc             C   s   d g } | d k r |  j  } x\ |  j t |  j  k  r| |  j |  j | k rS Pn | j |  j |  j  |  j d 7_ q! Wt j |  S)a  Parse an RFC 2822 atom.

        Optional atomends specifies a different set of end token delimiters
        (the default is to use self.atomends).  This is used e.g. in
        getphraselist() since phrase endings must not include the `.' (which
        is legal in phrases).r   Nr   )rB   r?   r'   rD   r)   rJ   rK   )rF   rB   Zatomlistr   r   r   r^     s    		zAddrlistClass.getatomc             C   s   g  } x |  j  t |  j  k  r |  j |  j  |  j k rL |  j  d 7_  q	 |  j |  j  d k rx | j |  j    q	 |  j |  j  d k r |  j j |  j    q	 |  j |  j  |  j k r Pq	 | j |  j	 |  j   q	 W| S)zParse a sequence of RFC 2822 phrases.

        A phrase is a sequence of words, which are in turn either RFC 2822
        atoms or quoted-strings.  Phrases are canonicalized by squeezing all
        runs of continuous whitespace into one space.
        r   r:   rH   )
r?   r'   rD   rA   r)   r]   rE   rI   rC   r^   )rF   rW   r   r   r   rS     s    zAddrlistClass.getphraselist)__name__
__module____qualname____doc__rG   rL   rO   rM   rV   rU   rZ   ra   r]   rI   r`   r^   rS   r   r   r   r   r=      s   ; &%r=   c               @   sj   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)AddressListz@An AddressList encapsulates a list of parsed RFC 2822 addresses.c             C   s5   t  j |  |  | r( |  j   |  _ n	 g  |  _ d  S)N)r=   rG   rO   addresslist)rF   rD   r   r   r   rG     s    zAddressList.__init__c             C   s   t  |  j  S)N)r'   rg   )rF   r   r   r   __len__  s    zAddressList.__len__c             C   sY   t  d   } |  j d  d   | _ x0 | j D]% } | |  j k r, | j j |  q, W| S)N)rf   rg   r)   )rF   othernewaddrxr   r   r   __add__  s    zAddressList.__add__c             C   s7   x0 | j  D]% } | |  j  k r
 |  j  j |  q
 W|  S)N)rg   r)   )rF   ri   rk   r   r   r   __iadd__  s    zAddressList.__iadd__c             C   sC   t  d   } x0 |  j D]% } | | j k r | j j |  q W| S)N)rf   rg   r)   )rF   ri   rj   rk   r   r   r   __sub__  s
    zAddressList.__sub__c             C   s7   x0 | j  D]% } | |  j  k r
 |  j  j |  q
 W|  S)N)rg   remove)rF   ri   rk   r   r   r   __isub__  s    zAddressList.__isub__c             C   s   |  j  | S)N)rg   )rF   r+   r   r   r   __getitem__#  s    zAddressList.__getitem__N)rb   rc   rd   re   rG   rh   rl   rm   rn   rp   rq   r   r   r   r   rf     s   	rf   )re   __all__r7   r8   rT   rJ   Z
COMMASPACEr*   r%   r0   r   r   r   r   r   r=   rf   r   r   r   r   <module>   s6   	u	

 .