o
    4˜Žj�  ã                   @   s~  U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	l m!Z! dd
l"m#Z# ddl$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7Z7ddl8m9Z9m:Z:m;Z; ddl<m=Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ejEdkrÛddlZFnddlFZFdZGe H¡ dkZIe H¡ dkZJejEdkZKdZLe/dƒZMe/dƒZNe Odd¡ZPePjQZQeRe
jS Td¡ƒZUeVd d!geWd"d#ƒ¢R ƒZXeVeBjYhƒZZej[j\�p1ej[j] �o1eRe
jS Td$¡ƒZ^d%d&„ eWdd'ƒD ƒZ_d(d&„ eWdd)ƒD ƒe`d*ƒhB Zad+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<e`d=ƒhZbe_eaA ebA ZcG d>d?„ d?ƒZddÌdBeedCeedDeedEeefdFdG„ZfG dHdI„ dIedIg dJ¢ƒƒZg	KdÍdBeedCeedDeedEegfdLdM„ZhdNe@dEeie@egdB f fdOdP„ZjdEe	j	dB fdQdR„Zke7jldSdSdSdT�G dUdV„ dVƒƒZmdWe	j	dB dXeedEegfdYdZ„ZndEeoeeemf fd[d\„ZpdNe@dEeie@egdB f fd]d^„Zqe7jldSdSdSdT�G d_d`„ d`ƒƒZrejsdadb�dceedEerfddde„ƒZtG dfdg„ dgeƒZuejsdadb�dheedEeieee'eeeef f fdidj„ƒZvdÎdke*dleedB dEeedB fdmdn„Zwe xdo¡Zydpd&„ eWd)d*ƒD ƒdqhB ZzdreedEeefdsdt„Z{	AdÏdueedveRdweedxeedEeef
dydz„Z|dXeedB dEeRfd{d|„Z}dXeedEeRfd}d~„Z~dae€dB e�d< d@a‚dEeefd€d�„ZƒdÐd„d…„Z„	†dÑd‡e…dˆeed‰e†dŠej‡d‹e†dEejˆdB fdŒd�„Z‰	†dÑdŽeg e*f d‰e†dŠej‡d‹e†dEejˆdB f
d�d�„ZŠd‘e†d‰e†d’e†dEe†fd“d”„Z‹G d•d–„ d–ƒZŒG d—d˜„ d˜e+d˜ ƒZ�G d™dš„ dše�ƒZŽG d›dœ„ dœe�ƒZ�	†dÑd�e†dB dže†dEeFj�fdŸd „Z‘G d¡d¢„ d¢ƒZ’d£d¤d¥eMdEdfd¦d§„Z“e”ƒ Z•G d¨d©„ d©e.ƒZ–e•fd£dªd«e”d¬e”dEdfd­d®„Z—ej˜G d¯d°„ d°e,eM ƒƒZ™G d±d²„ d²e™eM ƒZšG d³d´„ d´e™eM ƒZ›G dµd¶„ d¶e™eM ƒZœG d·d¸„ d¸eeeeše* B e*f ƒZ�d¹Zže xež¡ZŸdºež› d»�Z e xe ¡Z¡e xd+e › d¼�¡Z¢d½Z£e7jldSdSdSdT�G d¾d¿„ d¿ƒƒZ¤dÀeedEdfdÁdÂ„Z¥dÃeedB dEejdB fdÄdÅ„Z¦ejsdÆeedÇe€dEeRfdÈdÉ„ƒZ§dÆeedÇe€dEeRfdÊdË„Z¨dS )ÒzVarious helper functionsé    N)Ú
namedtuple)ÚCallableÚ	GeneratorÚIterableÚIteratorÚMapping)Úsuppress)ÚEmailMessage)ÚHeaderParser)ÚHTTP)Ú	parsedate©Úceil)ÚPath)ÚMappingProxyTypeÚTracebackType)ÚAnyÚContextManagerÚGenericÚOptionalÚProtocolÚTypeVarÚget_argsÚoverload)Úquote)Ú
getproxiesÚproxy_bypass)Ú	MultiDictÚMultiDictProxyÚMultiMapping)Úunder_cached_property©ÚURLé   )Úhdrs)Úclient_logger©é   é   )Ú	BasicAuthÚChainMapProxyÚETagÚreifyÚDarwinÚWindowsi   Ú_TÚ_SÚ	_SENTINELÚsentinelÚAIOHTTP_NO_EXTENSIONSéÌ   i0  éd   éÈ   ÚPYTHONASYNCIODEBUGc                 C   ó   h | ]}t |ƒ’qS © ©Úchr©Ú.0Úir9   r9   úL/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiohttp/helpers.pyÚ	<setcomp>V   ó    r@   é€   c                 C   r8   r9   r:   r<   r9   r9   r?   r@   W   rA   é    é   ú(ú)ú<ú>ú@ú,ú;ú:ú\ú"ú/ú[ú]ú?ú=Ú{Ú}ú é	   c                   @   s   e Zd Zded fdd„ZdS )ÚnoopÚreturn)NNNc                 c   s   � d V  d S ©Nr9   ©Úselfr9   r9   r?   Ú	__await__s   s   €
znoop.__await__N)Ú__name__Ú
__module__Ú__qualname__r   r]   r9   r9   r9   r?   rX   r   s    rX   Ú úutf-8ÚloginÚpasswordÚencodingrY   c                 C   s8   d| v rt dƒ‚| › d|› � |¡}dt |¡ |¡ S )zêEncode HTTP Basic Authentication credentials as an Authorization header value.

    Returns a string of the form ``"Basic <base64>"`` suitable for use as the
    value of the ``Authorization`` (or ``Proxy-Authorization``) header.
    rL   z2A ":" is not allowed in login (RFC 7617#section-2)zBasic )Ú
ValueErrorÚencodeÚbase64Ú	b64encodeÚdecode)rc   rd   re   Úcredsr9   r9   r?   Úencode_basic_authw   s   rl   c                	       s„   e Zd ZdZ	ddedededd f‡ fdd	„Zedd
ededd fdd„ƒZeddœdedede	d  fdd„ƒZ
defdd„Z‡  ZS )r)   z!Http basic authentication helper.ra   Úlatin1rc   rd   re   rY   c                    sR   |d u rt dƒ‚|d u rt dƒ‚d|v rt dƒ‚tjdtdd� tƒ  | |||¡S )Nz"None is not allowed as login valuez%None is not allowed as password valuerL   z5A ":" is not allowed in login (RFC 1945#section-11.1)z‡BasicAuth is deprecated and will be removed in aiohttp 4.0; use aiohttp.encode_basic_auth() with headers={'Authorization': ...} insteadé   )Ú
stacklevel)rf   ÚwarningsÚwarnÚDeprecationWarningÚsuperÚ__new__)Úclsrc   rd   re   ©Ú	__class__r9   r?   rt   †   s   ûzBasicAuth.__new__Úauth_headerc                 C   s´   z
|  dd¡\}}W n ty   tdƒ‚w | ¡ dkr"td| ƒ‚ztj| d¡dd� |¡}W n tjy=   td	ƒ‚w z
|  d
d¡\}}W n tyS   tdƒ‚w t	|||ƒS )z<Create a BasicAuth object from an Authorization HTTP header.rV   r#   z%Could not parse authorization header.ÚbasiczUnknown authorization method %sÚasciiT)ÚvalidatezInvalid base64 encoding.rL   zInvalid credentials.)
Úsplitrf   Úlowerrh   Ú	b64decoderg   rj   ÚbinasciiÚErrorÚ_basic_auth_no_warn)ru   rx   re   Ú	auth_typeÚencoded_credentialsÚdecodedÚusernamerd   r9   r9   r?   rj   ›   s,   ÿ
ÿþÿÿzBasicAuth.decode©re   Úurlc                C   sB   t |tƒs	tdƒ‚|jdu r|jdu rdS t|jpd|jpd|ƒS )zCreate BasicAuth from url.zurl should be yarl.URL instanceNra   )Ú
isinstancer"   Ú	TypeErrorÚraw_userÚraw_passwordr�   Úuserrd   )ru   r‡   re   r9   r9   r?   Úfrom_url¸   s
   
zBasicAuth.from_urlc                 C   s   t | j| j| jƒS )zEncode credentials.)rl   rc   rd   re   r[   r9   r9   r?   rg   Ã   ó   zBasicAuth.encode©ra   rm   )rm   )r^   r_   r`   Ú__doc__Ústrrt   Úclassmethodrj   r"   r   r�   rg   Ú__classcell__r9   r9   rv   r?   r)   ƒ   s"    ÿÿÿÿþ"
r)   ©rc   rd   re   rm   c                 C   s   t  t| ||f¡S )zÒConstruct a BasicAuth without emitting the deprecation warning.

    For internal use only. Bypasses BasicAuth.__new__ so that aiohttp's own
    machinery doesn't trigger deprecation warnings in user code.
    )Útuplert   r)   r”   r9   r9   r?   r�   È   s   r�   r‡   c                 C   s<   | j du r| jdu r| dfS |  d¡t| jpd| jpdƒfS )zIRemove user and password from URL if present and return BasicAuth object.Nra   )rŠ   r‹   Ú	with_userr�   rŒ   rd   )r‡   r9   r9   r?   Ústrip_auth_from_urlÓ   s    r—   c                  C   s0  t j d¡} | durt| ƒ}n(zt ¡ }W n ty. } zt d|¡ W Y d}~dS d}~ww |tr4dnd }zt	 	t
|ƒ¡W S  t	jyY } zt d|¡ W Y d}~dS d}~w ty— } z3d}t t¡� | ¡ }W d  ƒ n1 svw   Y  | s|rŒt d|¡ W Y d}~dS W Y d}~dS d}~ww )	zÙLoad netrc from file.

    Attempt to load it from the path specified by the env-var
    NETRC or in the default location in the user's home directory.

    Returns None if it couldn't be found or fails to parse.
    ÚNETRCNzHCould not resolve home directory when trying to look for .netrc file: %sÚ_netrcz.netrczCould not parse .netrc file: %sFzCould not read .netrc file: %s)ÚosÚenvironÚgetr   ÚhomeÚRuntimeErrorr%   ÚdebugÚ
IS_WINDOWSÚnetrcr‘   ÚNetrcParseErrorÚwarningÚOSErrorÚ
contextlibr   Úis_file)Ú	netrc_envÚ
netrc_pathÚhome_dirÚeÚnetrc_existsr9   r9   r?   Únetrc_from_envÜ   s@   
ý€ù	€ö
ÿ
û€ör¬   T)Úauto_attribsÚfrozenÚslotsc                   @   s"   e Zd ZU eed< edB ed< dS )Ú	ProxyInfoÚproxyNÚ
proxy_auth)r^   r_   r`   r"   Ú__annotations__r)   r9   r9   r9   r?   r°     ó   
 r°   Ú	netrc_objÚhostc                 C   sf   | du rt dƒ‚|  |¡}|du rt d|›d�ƒ‚|\}}}|s$|du r&|n|}|du r.d}t||ƒS )zÐ
    Return :py:class:`~aiohttp.BasicAuth` credentials for ``host`` from ``netrc_obj``.

    :raises LookupError: if ``netrc_obj`` is :py:data:`None` or if no
            entry is found for the ``host``.
    NzNo .netrc file foundzNo entry for z found in the `.netrc` file.ra   )ÚLookupErrorÚauthenticatorsr�   )rµ   r¶   Úauth_from_netrcrc   Úaccountrd   r…   r9   r9   r?   Úbasicauth_from_netrc  s   


r»   c               	   C   sº   dd„ t ƒ  ¡ D ƒ} tƒ }dd„ |  ¡ D ƒ}i }| ¡ D ]>\}}|\}}|jdv r4t d|j ¡ |¡ q|rS|d u rS|jd urSzt||jƒ}W n t	yR   d }Y nw t
||ƒ||< q|S )Nc                 S   s"   i | ]\}}|d v r|t |ƒ“qS ))ÚhttpÚhttpsÚwsÚwssr!   ©r=   ÚkÚvr9   r9   r?   Ú
<dictcomp>+  s
    þz$proxies_from_env.<locals>.<dictcomp>c                 S   s   i | ]	\}}|t |ƒ“qS r9   )r—   rÀ   r9   r9   r?   rÃ   1  s    )r½   r¿   z)%s proxies %s are not supported, ignoring)r   Úitemsr¬   Úschemer%   r£   Úupperr¶   r»   r·   r°   )Ú
proxy_urlsrµ   ÚstrippedÚretÚprotoÚvalr±   Úauthr9   r9   r?   Úproxies_from_env*  s,   þ
ÿ
ÿrÍ   c                 C   sf   | j durt| j ƒrtd| j ›d�ƒ‚tƒ }z|| j }W n ty,   td| ›d�ƒ‚w |j|jfS )z5Get a permitted proxy for the given URL from the env.NzProxying is disallowed for `ú`zNo proxies found for `z` in the env)r¶   r   r·   rÍ   rÅ   ÚKeyErrorr±   r²   )r‡   Úproxies_in_envÚ
proxy_infor9   r9   r?   Úget_env_proxy_for_urlD  s   ÿrÒ   c                   @   s.   e Zd ZU eed< eed< eed< ded< dS )ÚMimeTypeÚtypeÚsubtypeÚsuffixzMultiDictProxy[str]Ú
parametersN)r^   r_   r`   r‘   r³   r9   r9   r9   r?   rÓ   R  s
   
 rÓ   é8   )ÚmaxsizeÚmimetypec                 C   sÀ   | st dddttƒ ƒd�S |  d¡}tƒ }|dd… D ]}| ¡ s"q| d¡\}}}| | ¡  ¡ | d¡¡ q|d  ¡  ¡ }|d	krFd
}| d¡\}}}	|	 d¡\}	}}
t ||	|
t|ƒd�S )a  Parses a MIME type into its components.

    mimetype is a MIME type string.

    Returns a MimeType object.

    Example:

    >>> parse_mimetype('text/html; charset=utf-8')
    MimeType(type='text', subtype='html', suffix='',
             parameters={'charset': 'utf-8'})

    ra   )rÔ   rÕ   rÖ   r×   rK   r#   NrS   z "r   Ú*z*/*rO   ú+)rÓ   r   r   r|   ÚstripÚ	partitionÚaddr}   )rÚ   ÚpartsÚparamsÚitemÚkeyÚ_ÚvalueÚfulltypeÚmtypeÚstyperÖ   r9   r9   r?   Úparse_mimetypeZ  s&   ÿ
ÿré   c                       s,   e Zd Zd‡ fdd„Zdefdd„Z‡  ZS )ÚEnsureOctetStreamrY   Nc                    s   t ƒ  ¡  |  d¡ d S ©Nzapplication/octet-stream)rs   Ú__init__Úset_default_typer[   rv   r9   r?   rì   ƒ  s   
zEnsureOctetStream.__init__c                 C   sB   |   dd¡ ¡ }| d¡\}}}| ¡ }| d¡dkr|  ¡ S |S )a  Re-implementation from Message

        Returns application/octet-stream in place of plain/text when
        value is wrong.

        The way this class is used guarantees that content-type will
        be present so simplify the checks wrt to the base implementation.
        zcontent-typera   rK   rO   r#   )rœ   r}   rÞ   rÝ   ÚcountÚget_default_type)r\   rå   Úctyperä   r9   r9   r?   Úget_content_typeˆ  s   	z"EnsureOctetStream.get_content_type©rY   N)r^   r_   r`   rì   r‘   rñ   r“   r9   r9   rv   r?   rê   ‚  s    rê   Úrawc                 C   sF   t ttd� d| › �¡}| ¡ }| d¡}t|dd… ƒ}|t|ƒfS )z¶Parse Content-Type header.

    Returns a tuple of the parsed content type and a
    MappingProxyType of parameters. The default returned value
    is `application/octet-stream`
    )ÚpolicyzContent-Type: r9   r#   N)r
   rê   r   Úparsestrrñ   Ú
get_paramsÚdictr   )ró   ÚmsgÚcontent_typerá   Úcontent_dictr9   r9   r?   Úparse_content_type›  s
   
rû   ÚobjÚdefaultc                 C   s@   t | dd ƒ}|rt|tƒr|d dkr|d dkrt|ƒjS |S )NÚnamer   rG   éÿÿÿÿrH   )Úgetattrrˆ   r‘   r   rþ   )rü   rý   rþ   r9   r9   r?   Úguess_filenameª  s   &
r  z[^\041\043-\133\135-\176]c                 C   r8   r9   r:   r<   r9   r9   r?   r@   ²  rA   ú	Úcontentc                 C   s*   t t| ƒkstd| ›�ƒ‚t dd„ | ¡S )a  Return 7-bit content as quoted-string.

    Format content into a quoted-string as defined in RFC5322 for
    Internet Message Format. Notice that this is not the 8-bit HTTP
    format, but the 7-bit email format. Content must be in usascii or
    a ValueError is raised.
    zbad content for quoted-string c                 S   s   d|   d¡ S )NrM   r   )Úgroup)Úxr9   r9   r?   Ú<lambda>¿  s    zquoted_string.<locals>.<lambda>)ÚQCONTENTÚsetrf   Únot_qtext_reÚsub)r  r9   r9   r?   Úquoted_stringµ  s   r  ÚdisptypeÚquote_fieldsÚ_charsetrá   c           
      K   s>  | rt t| ƒkstd| ›�ƒ‚| }|r�g }| ¡ D ]r\}}|r%t t|ƒks/td|›d|›�ƒ‚|rx| ¡ dkrHt|d|d�}| |d| f¡ qzt|ƒ}W n tym   d |dt|d|d�f¡}| |d	 |f¡ Y qw | |d| f¡ q| 	d
d¡ 	dd¡}| |d| f¡ qd dd„ |D ƒ¡}	d ||	f¡}|S )ak  Sets ``Content-Disposition`` header for MIME.

    This is the MIME payload Content-Disposition header from RFC 2183
    and RFC 7579 section 4.2, not the HTTP Content-Disposition from
    RFC 6266.

    disptype is a disposition type: inline, attachment, form-data.
    Should be valid extension token (see RFC 2183)

    quote_fields performs value quoting to 7-bit MIME headers
    according to RFC 7578. Set to quote_fields to False if recipient
    can take 8-bit file names and field values.

    _charset specifies the charset to use when quote_fields is True.

    params is a dict with disposition params.
    zbad content disposition type z"bad content disposition parameter rS   Úfilenamera   r†   z"%s"z''rÛ   rM   z\\rN   z\"z; c                 s   s   � | ]}d   |¡V  qdS )rS   N)Újoin)r=   Úpairr9   r9   r?   Ú	<genexpr>ð  s   € z-content_disposition_header.<locals>.<genexpr>)
ÚTOKENr  rf   rÄ   r}   r   Úappendr  r  Úreplace)
r  r  r  rá   rå   Úlparamsrã   rË   ÚqvalÚsparamsr9   r9   r?   Úcontent_disposition_headerÂ  s4   ÿür  c                 C   s    | sdS d| v p|   dd¡ ¡ S )z‰Check if host looks like an IP Address.

    This check is only meant as a heuristic to ensure that
    a host is not a domain name.
    FrL   Ú.ra   )r  Úisdigit)r¶   r9   r9   r?   Úis_ip_addressõ  s   r  c                 C   sŽ   |   d¡}t|ƒdkrdS |D ]5}dt|ƒ  krdkr)n  dS | ¡ r)| ¡ s, dS |d dkr;t|ƒdkr; dS t|ƒdkrD dS qd	S )
zÏCheck if host is a canonical dotted-quad IPv4 address.

    Rejects the legacy numeric forms that ``socket`` still accepts and
    maps onto an address, e.g. ``2130706433``, ``017700000001``, ``127.1``.
    r  é   Fr#   r'   r   Ú0éÿ   T)r|   ÚlenÚisasciir  Úint)r¶   rà   Úpartr9   r9   r?   Úis_canonical_ipv4_address  s   
ÿÿr$  Ú_cached_current_datetimec                  C   s\   t t ¡ ƒ} | tkr,d}d}t | ¡^}}}}}}}	}
d||	 ||| ||||f a| atS )N)ÚMonÚTueÚWedÚThuÚFriÚSatÚSun)ra   ÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDecz#%s, %02d %3s %4d %02d:%02d:%02d GMT)r"  Útimer%  ÚgmtimeÚ_cached_formatted_datetime)ÚnowÚ_weekdaynameÚ
_monthnameÚyearÚmonthÚdayÚhhÚmmÚssÚwdÚtailr9   r9   r?   Úrfc822_formatted_time  s    ù	rG  Úinfoútuple[weakref.ref[object], str]c                 C   sT   | \}}|ƒ }|d ur(t tƒ� t||ƒƒ  W d   ƒ d S 1 s!w   Y  d S d S rZ   )r   Ú	Exceptionr   )rH  Úrefrþ   Úobr9   r9   r?   Ú_weakref_handleD  s   
"ÿÿrM  é   rL  rþ   ÚtimeoutÚloopÚtimeout_ceil_thresholdc                 C   sH   |d ur"|dkr"|  ¡ | }||krt|ƒ}| |tt | ¡|f¡S d S ©Nr   )r9  r   Úcall_atrM  ÚweakrefrK  )rL  rþ   rO  rP  rQ  Úwhenr9   r9   r?   Úweakref_handleL  s   rV  Úcbc                 C   s4   |d u s|dkr
d S |  ¡ }t|||ƒ}| || ¡S rR  )r9  Úcalculate_timeout_whenrS  )rW  rO  rP  rQ  r<  rU  r9   r9   r?   Ú
call_later\  s
   rY  Ú	loop_timeÚtimeout_ceiling_thresholdc                 C   s   | | }||krt |ƒS |S )z$Calculate when to execute a timeout.r   )rZ  rO  r[  rU  r9   r9   r?   rX  i  s   rX  c                	   @   sˆ   e Zd ZdZdZ	ddejdedB deddfd	d
„Zde	d de
de
ddfdd„Zddd„ZdejdB fdd„Zddd„Zddd„ZdS )ÚTimeoutHandlezTimeout handle©Ú_timeoutÚ_loopÚ_ceil_thresholdÚ
_callbacksrN  rP  rO  NÚceil_thresholdrY   c                 C   s   || _ || _|| _g | _d S rZ   r]  )r\   rP  rO  rb  r9   r9   r?   rì   z  s
   þzTimeoutHandle.__init__Úcallback).NÚargsÚkwargsc                 O   s   | j  |||f¡ d S rZ   )ra  r  )r\   rc  rd  re  r9   r9   r?   Úregister‡  s   zTimeoutHandle.registerc                 C   s   | j  ¡  d S rZ   )ra  Úclearr[   r9   r9   r?   ÚcloseŒ  ó   zTimeoutHandle.closec                 C   sJ   | j }|d ur#|dkr#| j ¡ | }|| jkrt|ƒ}| j || j¡S d S rR  )r^  r_  r9  r`  r   rS  Ú__call__)r\   rO  rU  r9   r9   r?   Ústart�  s   
zTimeoutHandle.startÚBaseTimerContextc                 C   s4   | j d ur| j dkrt| jƒ}|  |j¡ |S tƒ S rR  )r^  ÚTimerContextr_  rf  rO  Ú	TimerNoop)r\   Útimerr9   r9   r?   ro  ™  s
   
zTimeoutHandle.timerc              	   C   sV   | j D ] \}}}ttƒ� ||i |¤Ž W d   ƒ n1 sw   Y  q| j  ¡  d S rZ   )ra  r   rJ  rg  )r\   rW  rd  re  r9   r9   r?   rj  ¡  s   
ÿ€zTimeoutHandle.__call__©rN  rò   )rY   rl  )r^   r_   r`   r�   Ú	__slots__ÚasyncioÚAbstractEventLoopÚfloatrì   r   r   rf  rh  ÚTimerHandlerk  ro  rj  r9   r9   r9   r?   r\  u  s4    üþýü
ûÿÿÿ
þ


r\  c                   @   s   e Zd ZdZddd„ZdS )rl  r9   rY   Nc                 C   s   dS )z0Raise TimeoutError if timeout has been exceeded.Nr9   r[   r9   r9   r?   Úassert_timeout­  s    zBaseTimerContext.assert_timeoutrò   )r^   r_   r`   rq  rv  r9   r9   r9   r?   rl  ©  s    rl  c                   @   sH   e Zd ZdZdefdd„Zdee dB dedB dedB ddfd	d
„Z	dS )rn  r9   rY   c                 C   s   | S rZ   r9   r[   r9   r9   r?   Ú	__enter__µ  ó   zTimerNoop.__enter__Úexc_typeNÚexc_valÚexc_tbc                 C   ó   d S rZ   r9   )r\   ry  rz  r{  r9   r9   r?   Ú__exit__¸  s   zTimerNoop.__exit__)
r^   r_   r`   rq  rl  rw  rÔ   ÚBaseExceptionr   r}  r9   r9   r9   r?   rn  ±  s    
þýüûrn  c                	   @   sx   e Zd ZdZdZdejddfdd„Zddd	„Zde	fd
d„Z
dee dB dedB dedB dedB fdd„Zddd„ZdS )rm  z&Low resolution timeout context manager©r_  Ú_tasksÚ
_cancelledÚ_cancellingrP  rY   Nc                 C   s   || _ g | _d| _d| _d S )NFr   r  )r\   rP  r9   r9   r?   rì   Æ  s   
zTimerContext.__init__c                 C   s   | j rtjd‚dS )z7Raise TimeoutError if timer has already been cancelled.N)r�  rr  ÚTimeoutErrorr[   r9   r9   r?   rv  Ì  s   ÿzTimerContext.assert_timeoutc                 C   sP   t j| jd�}|d u rtdƒ‚tjdkr| ¡ | _| jr t j	d ‚| j
 |¡ | S )N)rP  z4Timeout context manager should be used inside a taskr&   )rr  Úcurrent_taskr_  rž   ÚsysÚversion_infoÚ
cancellingr‚  r�  rƒ  r€  r  ©r\   Útaskr9   r9   r?   rw  Ñ  s   

zTimerContext.__enter__ry  rz  r{  c                 C   sX   d }| j r
| j  ¡ }|tju r*| jr*|d usJ ‚tjdkr&| ¡ | jkr&d S tj	|‚d S )Nr&   )
r€  Úpoprr  ÚCancelledErrorr�  r…  r†  Úuncancelr‚  rƒ  )r\   ry  rz  r{  Ú
enter_taskr9   r9   r?   r}  â  s   

zTimerContext.__exit__c                 C   s,   | j st| jƒD ]}| ¡  qd| _ d S d S ©NT)r�  r  r€  Úcancelrˆ  r9   r9   r?   rO  ú  s
   

üzTimerContext.timeoutrò   )r^   r_   r`   r�   rq  rr  rs  rì   rv  rl  rw  rÔ   r~  r   Úboolr}  rO  r9   r9   r9   r?   rm  Á  s     

þýü
ûrm  Údelayrb  c                 C   sL   | d u s| dkrt  d ¡S t ¡ }| ¡ }||  }| |kr!t|ƒ}t  |¡S rR  )Úasync_timeoutrO  rr  Úget_running_loopr9  r   Ú
timeout_at)r‘  rb  rP  r<  rU  r9   r9   r?   Úceil_timeout  s   

r•  c                   @   sº   e Zd ZU dZeg d¢ƒZee ed< dZ	edB ed< dZ
eeef dB ed< eZedB eB ed< dedB d	dfd
d„Zed	efdd„ƒZed	edB fdd„ƒZed	edB fdd„ƒZdS )ÚHeadersMixinzMixin for handling headers.)Ú_content_typeÚ_content_dictÚ_stored_content_typeÚ_headersNr—  r˜  r™  ró   rY   c                 C   s>   || _ |d u rd| _i | _d S t|ƒ\}}|| _| ¡ | _d S rë   )r™  r—  r˜  rû   Úcopy)r\   ró   rù   Úcontent_mapping_proxyr9   r9   r?   Ú_parse_content_type  s   
z HeadersMixin._parse_content_typec                 C   s6   | j  tj¡}| j|kr|  |¡ | jdusJ ‚| jS )z7The value of content part for Content-Type HTTP header.N)rš  rœ   r$   ÚCONTENT_TYPEr™  r�  r—  ©r\   ró   r9   r9   r?   rù   &  s
   

zHeadersMixin.content_typec                 C   s<   | j  tj¡}| j|kr|  |¡ | jdusJ ‚| j d¡S )z7The value of charset part for Content-Type HTTP header.NÚcharset)rš  rœ   r$   rž  r™  r�  r˜  rŸ  r9   r9   r?   r   /  s
   

zHeadersMixin.charsetc                 C   s"   | j  tj¡}|du rdS t|ƒS )z(The value of Content-Length HTTP header.N)rš  rœ   r$   ÚCONTENT_LENGTHr"  )r\   Úcontent_lengthr9   r9   r?   r¢  8  s   zHeadersMixin.content_length)r^   r_   r`   r�   Ú	frozensetÚATTRSr   r‘   r³   r—  r˜  r÷   r2   r™  r1   r�  Úpropertyrù   r   r"  r¢  r9   r9   r9   r?   r–    s   
 r–  Úfutzasyncio.Future[_T]Úresultc                 C   s   |   ¡ s|  |¡ d S d S rZ   )ÚdoneÚ
set_result)r¦  r§  r9   r9   r?   r©  ?  s   ÿr©  c                   @   s&   e Zd Z	ddededdfdd„ZdS )	ÚErrorableProtocol.ÚexcÚ	exc_causerY   Nc                 C   r|  rZ   r9   )r\   r«  r¬  r9   r9   r?   Úset_exceptionH  s   zErrorableProtocol.set_exception©.)r^   r_   r`   r~  r­  r9   r9   r9   r?   rª  G  s    ýþýürª  z&asyncio.Future[_T] | ErrorableProtocolr«  r¬  c                 C   sB   t  | ¡r|  ¡ rdS |tu }||u }|s|s||_|  |¡ dS )zÑSet future exception.

    If the future is marked as complete, this function is a no-op.

    :param exc_cause: An exception that is a direct cause of ``exc``.
                      Only set if provided.
    N)rr  Úisfuturer¨  Ú_EXC_SENTINELÚ	__cause__r­  )r¦  r«  r¬  Úexc_is_sentinelÚexc_causes_itselfr9   r9   r?   r­  O  s   r­  c                   @   s^   e Zd ZU dZdZee ed< ddedee	 dB fdd„Z
d	ed
efdd„Zd
efdd„ZdS )ÚBaseKeyz•Base for concrete context storage key classes.

    Each storage is provided with its own sub-class for the sake of some additional type safety.
    )Ú_nameÚ_tÚ__orig_class__r·  Nrþ   Útc                 C   sF   t  ¡ }|r|jjdkr|jd }n|j}|s|d | | _|| _d S )Nz<module>r^   r  )ÚinspectÚcurrentframeÚf_codeÚco_nameÚ	f_globalsÚf_backrµ  r¶  )r\   rþ   r¸  ÚframeÚmoduler9   r9   r?   rì   t  s   
ü
zBaseKey.__init__ÚotherrY   c                 C   s   t |tƒr| j|jk S dS rŽ  )rˆ   r´  rµ  )r\   rÁ  r9   r9   r?   Ú__lt__€  s   
zBaseKey.__lt__c                 C   s¨   | j }|d u r"ttƒ� t| jƒd }W d   ƒ n1 sw   Y  |d u r)d}nt|tƒrA|jdkr7|j}n|j› d|j› �}nt	|ƒ}d| j
j› d| j› d|› d�S )	Nr   z<<Unknown>>Úbuiltinsr  rG   rE   z, type=z)>)r¶  r   ÚAttributeErrorr   r·  rˆ   rÔ   r_   r`   Úreprrw   r^   rµ  )r\   r¸  Út_reprr9   r9   r?   Ú__repr__…  s   
þ

zBaseKey.__repr__rZ   )r^   r_   r`   r�   rq  rÔ   Úobjectr³   r‘   r/   rì   r�  rÂ  rÇ  r9   r9   r9   r?   r´  f  s   
 r´  c                   @   ó   e Zd ZdZdS )ÚAppKeyz.Keys for static typing support in Application.N©r^   r_   r`   r�   r9   r9   r9   r?   rÊ  ˜  ó    rÊ  c                   @   rÉ  )Ú
RequestKeyz*Keys for static typing support in Request.NrË  r9   r9   r9   r?   rÍ  œ  rÌ  rÍ  c                   @   rÉ  )ÚResponseKeyz+Keys for static typing support in Response.NrË  r9   r9   r9   r?   rÎ     rÌ  rÎ  c                	   @   sb  e Zd ZdZdeeeee B ef  ddfdd„Z	ddd„Z
ed	ee defd
d„ƒZed	edefdd„ƒZd	eee B defdd„Zed	ee dedeeB fdd„ƒZed d	ee dddedB fdd„ƒZed d	ededefdd„ƒZd!d	eee B dedefdd„Zdefdd„Zdeeee B  fdd„Zd	edefdd„Zdefdd„Zdefdd„ZdS )"r*   )Ú_mapsÚmapsrY   Nc                 C   s   t |ƒ| _d S rZ   )r•   rÏ  )r\   rÐ  r9   r9   r?   rì   §  ri  zChainMapProxy.__init__c                 C   s   t d| j› d�ƒ‚)NzInheritance class z  from ChainMapProxy is forbidden)r‰   r^   )ru   r9   r9   r?   Ú__init_subclass__ª  s   ÿzChainMapProxy.__init_subclass__rã   c                 C   r|  rZ   r9   ©r\   rã   r9   r9   r?   Ú__getitem__¯  rx  zChainMapProxy.__getitem__c                 C   r|  rZ   r9   rÒ  r9   r9   r?   rÓ  ²  rx  c              	   C   s4   | j D ]}z|| W   S  ty   Y qw t|ƒ‚rZ   )rÏ  rÏ   )r\   rã   Úmappingr9   r9   r?   rÓ  µ  s   
ÿrý   c                 C   r|  rZ   r9   ©r\   rã   rý   r9   r9   r?   rœ   ½  rx  zChainMapProxy.get.c                 C   r|  rZ   r9   rÕ  r9   r9   r?   rœ   À  rx  c                 C   r|  rZ   r9   rÕ  r9   r9   r?   rœ   Ã  rx  c                 C   s"   z| | W S  t y   | Y S w rZ   )rÏ   rÕ  r9   r9   r?   rœ   Æ  s
   
ÿc                 C   s   t tƒ j| jŽ ƒS rZ   )r   r  ÚunionrÏ  r[   r9   r9   r?   Ú__len__Ì  rŽ   zChainMapProxy.__len__c                 C   s&   i }t | jƒD ]}| |¡ qt|ƒS rZ   )ÚreversedrÏ  ÚupdateÚiter)r\   ÚdrÔ  r9   r9   r?   Ú__iter__Ð  s   zChainMapProxy.__iter__c                    s   t ‡ fdd„| jD ƒƒS )Nc                 3   s   � | ]}ˆ |v V  qd S rZ   r9   )r=   Úm©rã   r9   r?   r  Ø  s   € z-ChainMapProxy.__contains__.<locals>.<genexpr>©ÚanyrÏ  rÒ  r9   rÞ  r?   Ú__contains__×  s   zChainMapProxy.__contains__c                 C   s
   t | jƒS rZ   rß  r[   r9   r9   r?   Ú__bool__Ú  s   
zChainMapProxy.__bool__c                 C   s   d  tt| jƒ¡}d|› d�S )Nz, zChainMapProxy(rF   )r  ÚmaprÅ  rÏ  )r\   r  r9   r9   r?   rÇ  Ý  s   zChainMapProxy.__repr__rò   r®  rZ   )r^   r_   r`   rq  r   r   r‘   rÊ  r   rì   rÑ  r   r/   rÓ  r0   rœ   r"  r×  r   rÜ  rÈ  r�  rá  râ  rÇ  r9   r9   r9   r?   r*   ¤  s*    &
 " r*   z[!\x23-\x7E\x80-\xff]+z(W/)?"(z)"z)(?:\s*,\s*|$)|(.)rÛ   c                   @   s"   e Zd ZU eed< dZeed< dS )r+   rå   FÚis_weakN)r^   r_   r`   r‘   r³   rä  r�  r9   r9   r9   r?   r+   ì  r´   r+   rå   c                 C   s*   | t krt | ¡std| ›d�ƒ‚d S d S )NzValue z, is not a valid etag. Maybe it contains '"'?)ÚETAG_ANYÚ	_ETAGC_REÚ	fullmatchrf   )rå   r9   r9   r?   Úvalidate_etag_valueò  s
   
ÿÿrè  Údate_strc                 C   s`   | dur.t | ƒ}|dur.ttƒ� tj|dd… dtjjiŽW  d  ƒ S 1 s)w   Y  dS )z/Process a date string, return a datetime objectNé   Útzinfo)r   r   rf   ÚdatetimeÚtimezoneÚutc)ré  Ú	timetupler9   r9   r?   Úparse_http_dateù  s   
 ÿrð  ÚmethodÚcodec                 C   s2   |t v p| tv pd|  kodk n  o| tjkS )z-Check if a request must return an empty body.r6   é,  )ÚEMPTY_BODY_STATUS_CODESÚEMPTY_BODY_METHODSr$   ÚMETH_CONNECT©rñ  rò  r9   r9   r?   Úmust_be_empty_body  s
   ÿ ýrø  c                 C   s*   |t v pd|  kodk n  o| tjkS )zrCheck if a Content-Length header should be removed.

    This should always be a subset of must_be_empty_body
    r6   ró  )rô  r$   rö  r÷  r9   r9   r?   Úshould_remove_content_length  s    ÿrù  )ra   rb   r�   rZ   )Trb   )rH  rI  rY   Nrp  )©r�   rr  rh   r   r¥   rì  ÚenumÚ	functoolsr¹  r¡   rš   ÚplatformÚrer…  r9  rp   rT  Úcollectionsr   Úcollections.abcr   r   r   r   r   r   Úemail.messager	   Úemail.parserr
   Úemail.policyr   Úemail.utilsr   Úmathr   Úpathlibr   Útypesr   r   Útypingr   r   r   r   r   r   r   r   Úurllib.parser   Úurllib.requestr   r   ÚattrÚ	multidictr   r   r   Úpropcache.apir    r,   Úyarlr"   ra   r$   Úlogr%   r†  r’  Ú__all__ÚsystemÚIS_MACOSr    ÚPY_311ÚDEFAULT_CHUNK_SIZEr/   r0   ÚEnumr1   r2   r�  r›   rœ   ÚNO_EXTENSIONSr£  Úrangerô  Ú	METH_HEADrõ  ÚflagsÚdev_modeÚignore_environmentÚDEBUGÚCHARr;   ÚCTLÚ
SEPARATORSr  rX   r‘   rl   r)   r�   r•   r—   r¬   Úsr°   r»   r÷   rÍ   rÒ   rÓ   Ú	lru_cacheré   rê   rû   r  Úcompiler	  r  r  r  r  r$  r%  r"  r³   r;  rG  rM  rÈ  rt  rs  ru  rV  rY  rX  r\  rl  rn  rm  ÚTimeoutr•  r–  r©  r~  r°  rª  r­  Útotal_orderingr´  rÊ  rÍ  rÎ  r*   Ú_ETAGCræ  Ú_QUOTED_ETAGÚQUOTED_ETAG_REÚLIST_QUOTED_ETAG_RErå  r+   rè  rð  rø  rù  r9   r9   r9   r?   Ú<module>   s    (




ÿÿíFÿÿÿÿ
þ	+
'
$ 
ÿÿÿÿÿ
þ3
(ûÿþýüû
úü
ÿþýü
ûÿþý
ü4Bÿÿÿ
þ/ýÿþý
ü1 ?


	