§
    §>jS,  ã                   ó  — d dl mZ 	 d dlmZmZ n# e$ r d dlmZmZ Y nw xY w	 d dlmZ n# e$ r  G d„ d¦  «        ZY nw xY wd dlm	Z	 ddl
mZ d d	lZd d
lmZmZ ddgZ e¦   «         Z G d„ de¦  «        Z G d„ de¦  «        Zd	S )é    )Úabsolute_import)ÚMappingÚMutableMapping)ÚRLockc                   ó   — e Zd Zd„ Zd„ ZdS )r   c                 ó   — d S ©N© ©Úselfs    ú6/usr/lib/python3/dist-packages/urllib3/_collections.pyÚ	__enter__zRLock.__enter__   ó   € ØˆDó    c                 ó   — d S r	   r
   )r   Úexc_typeÚ	exc_valueÚ	tracebacks       r   Ú__exit__zRLock.__exit__   r   r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r   r   r   r      s2   € € € € € ð	ð 	ð 	ð	ð 	ð 	ð 	ð 	r   r   )ÚOrderedDicté   )ÚInvalidHeaderN)ÚiterkeysÚ
itervaluesÚRecentlyUsedContainerÚHTTPHeaderDictc                   óH   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ ZdS )r   a‘  
    Provides a thread-safe dict-like container which maintains up to
    ``maxsize`` keys while throwing away the least-recently-used keys beyond
    ``maxsize``.

    :param maxsize:
        Maximum number of recent elements to retain.

    :param dispose_func:
        Every time an item is evicted from the container,
        ``dispose_func(value)`` is called.  Callback which will get called
    é
   Nc                 óz   — || _         || _        |                      ¦   «         | _        t	          ¦   «         | _        d S r	   )Ú_maxsizeÚdispose_funcÚContainerClsÚ
_containerr   Úlock)r   Úmaxsizer$   s      r   Ú__init__zRecentlyUsedContainer.__init__/   s3   € ØˆŒØ(ˆÔà×+Ò+Ñ-Ô-ˆŒÝ‘G”GˆŒ	ˆ	ˆ	r   c                 ó�   — | j         5  | j                             |¦  «        }|| j        |<   |cd d d ¦  «         S # 1 swxY w Y   d S r	   )r'   r&   Úpop)r   ÚkeyÚitems      r   Ú__getitem__z!RecentlyUsedContainer.__getitem__6   s’   € àŒYð 	ð 	Ø”?×&Ò& sÑ+Ô+ˆDØ#'ˆDŒO˜CÑ Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ˆ&;»?Á?c                 ón  — t           }| j        5  | j                             |t           ¦  «        }|| j        |<   t	          | j        ¦  «        | j        k    r| j                             d¬¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   | j        r |t           ur|                      |¦  «         d S d S d S )NF)Úlast)Ú_Nullr'   r&   ÚgetÚlenr#   Úpopitemr$   )r   r,   ÚvalueÚevicted_valueÚ_keys        r   Ú__setitem__z!RecentlyUsedContainer.__setitem__=   s  € ÝˆØŒYð 	Jð 	Jà œO×/Ò/°µUÑ;Ô;ˆMØ#(ˆDŒO˜CÑ õ �4”?Ñ#Ô# d¤mÒ3Ð3Ø&*¤o×&=Ò&=À5Ð&=Ñ&IÔ&IÑ#��mð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jð Ôð 	- µeÐ!;Ð!;Ø×Ò˜mÑ,Ô,Ð,Ð,Ð,ð	-ð 	-Ð!;Ð!;s   �A&BÂBÂBc                 ó´   — | j         5  | j                             |¦  «        }d d d ¦  «         n# 1 swxY w Y   | j        r|                      |¦  «         d S d S r	   )r'   r&   r+   r$   )r   r,   r5   s      r   Ú__delitem__z!RecentlyUsedContainer.__delitem__L   s¥   € ØŒYð 	-ð 	-Ø”O×'Ò'¨Ñ,Ô,ˆEð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-ð Ôð 	%Ø×Ò˜eÑ$Ô$Ð$Ð$Ð$ð	%ð 	%s   ˆ/¯3¶3c                 ól   — | j         5  t          | j        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r	   )r'   r3   r&   r   s    r   Ú__len__zRecentlyUsedContainer.__len__S   s{   € ØŒYð 	(ð 	(Ý�t”Ñ'Ô'ð	(ð 	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   ˆ)©-°-c                 ó    — t          d¦  «        ‚)Nz7Iteration over this class is unlikely to be threadsafe.)ÚNotImplementedErrorr   s    r   Ú__iter__zRecentlyUsedContainer.__iter__W   s   € Ý!ØEñ
ô 
ð 	
r   c                 óþ   — | j         5  t          t          | j        ¦  «        ¦  «        }| j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   | j        r|D ]}|                      |¦  «         Œd S d S r	   )r'   Úlistr   r&   Úclearr$   )r   Úvaluesr5   s      r   rB   zRecentlyUsedContainer.clear\   sÑ   € ØŒYð 	$ð 	$å�* T¤_Ñ5Ô5Ñ6Ô6ˆFØŒO×!Ò!Ñ#Ô#Ð#ð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$ð
 Ôð 	)Øð )ð )�Ø×!Ò! %Ñ(Ô(Ð(Ð(ð	)ð 	)ð)ð )s   ˆ;AÁAÁAc                 ó†   — | j         5  t          t          | j        ¦  «        ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r	   )r'   rA   r   r&   r   s    r   ÚkeyszRecentlyUsedContainer.keysf   sƒ   € ØŒYð 	3ð 	3Ý� ¤Ñ1Ô1Ñ2Ô2ð	3ð 	3ð 	3ð 	3ñ 	3ô 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3øøøð 	3ð 	3ð 	3ð 	3ð 	3ð 	3s   ˆ!6¶:½:)r!   N)r   r   r   Ú__doc__r   r%   r)   r.   r8   r:   r<   r?   rB   rE   r
   r   r   r   r      s¢   € € € € € ðð ð €Lðð ð ð ðð ð ð-ð -ð -ð%ð %ð %ð(ð (ð (ð
ð 
ð 
ð
)ð )ð )ð3ð 3ð 3ð 3ð 3r   c                   ó  ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
ej        rej        Zej        Z e¦   «         Zd
„ Zd„ Zefd„Zd„ Zd„ Zd„ Zefd„Zd„ ZeZeZeZeZd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#e$d„ ¦   «         Z%ˆ xZ&S )r   ap  
    :param headers:
        An iterable of field-value pairs. Must not contain multiple field names
        when compared case-insensitively.

    :param kwargs:
        Additional field-value pairs to pass in to ``dict.update``.

    A ``dict`` like container for storing HTTP Headers.

    Field names are stored and compared case-insensitively in compliance with
    RFC 7230. Iteration provides the first case-sensitive key seen for each
    case-insensitive pair.

    Using ``__setitem__`` syntax overwrites fields that compare equal
    case-insensitively in order to maintain ``dict``'s api. For fields that
    compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
    in a loop.

    If multiple fields that are equal case-insensitively are passed to the
    constructor or ``.update``, the behavior is undefined and some will be
    lost.

    >>> headers = HTTPHeaderDict()
    >>> headers.add('Set-Cookie', 'foo=bar')
    >>> headers.add('set-cookie', 'baz=quxx')
    >>> headers['content-length'] = '7'
    >>> headers['SET-cookie']
    'foo=bar, baz=quxx'
    >>> headers['Content-Length']
    '7'
    Nc                 ó2  •— t          t          | ¦  «                             ¦   «          t          ¦   «         | _        |�@t          |t          ¦  «        r|                      |¦  «         n|                      |¦  «         |r|                      |¦  «         d S d S r	   )Úsuperr   r)   r   r&   Ú
isinstanceÚ
_copy_fromÚextend)r   ÚheadersÚkwargsÚ	__class__s      €r   r)   zHTTPHeaderDict.__init__�   s“   ø€ Ý�n˜dÑ#Ô#×,Ò,Ñ.Ô.Ð.Ý%™-œ-ˆŒØÐÝ˜'¥>Ñ2Ô2ð %Ø—’ Ñ(Ô(Ð(Ð(à—’˜GÑ$Ô$Ð$Øð 	 Ø�KŠK˜ÑÔÐÐÐð	 ð 	 r   c                 ó|   — ||g| j         |                     ¦   «         <   | j         |                     ¦   «                  S r	   ©r&   Úlower©r   r,   Úvals      r   r8   zHTTPHeaderDict.__setitem__˜   s/   € Ø(+¨S zˆŒ˜Ÿ	š	™œÑ$ØŒ˜sŸyšy™{œ{Ô+Ð+r   c                 óz   — | j         |                     ¦   «                  }d                     |dd …         ¦  «        S )Nú, r   ©r&   rR   ÚjoinrS   s      r   r.   zHTTPHeaderDict.__getitem__œ   s0   € ØŒo˜cŸiši™kœkÔ*ˆØ�yŠy˜˜Q˜R˜RœÑ!Ô!Ð!r   c                 ó:   — | j         |                     ¦   «         = d S r	   rQ   ©r   r,   s     r   r:   zHTTPHeaderDict.__delitem__    s   € ØŒO˜CŸIšI™KœKÐ(Ð(Ð(r   c                 ó8   — |                      ¦   «         | j        v S r	   )rR   r&   rZ   s     r   Ú__contains__zHTTPHeaderDict.__contains__£   s   € Ø�yŠy‰{Œ{˜dœoÐ-Ð-r   c                 ój  — t          |t          ¦  «        st          |d¦  «        sdS t          |t          | ¦  «        ¦  «        s t          | ¦  «        |¦  «        }t	          d„ |                      ¦   «         D ¦   «         ¦  «        t	          d„ |                     ¦   «         D ¦   «         ¦  «        k    S )NrE   Fc              3   óH   K  — | ]\  }}|                      ¦   «         |fV — Œd S r	   ©rR   ©Ú.0ÚkÚvs      r   ú	<genexpr>z(HTTPHeaderDict.__eq__.<locals>.<genexpr>«   s2   è è € ÐAÐA¡t q¨!�Q—W’W‘Y”Y �NÐAÐAÐAÐAÐAÐAr   c              3   óH   K  — | ]\  }}|                      ¦   «         |fV — Œd S r	   r_   r`   s      r   rd   z(HTTPHeaderDict.__eq__.<locals>.<genexpr>«   sK   è è € ð J
ð J
Ù#˜q !ˆQ�WŠW‰YŒY˜ˆNðJ
ð J
ð J
ð J
ð J
ð J
r   )rJ   r   ÚhasattrÚtypeÚdictÚ
itermerged©r   Úothers     r   Ú__eq__zHTTPHeaderDict.__eq__¦   sÀ   € Ý˜%¥Ñ)Ô)ð 	µ'¸%ÀÑ2HÔ2Hð 	Ø�5Ý˜%¥ d¡¤Ñ,Ô,ð 	&Ø•D˜‘J”J˜uÑ%Ô%ˆEÝÐAÐA¨t¯ªÑ/@Ô/@ÐAÑAÔAÑAÔAÅTð J
ð J
Ø',×'7Ò'7Ñ'9Ô'9ðJ
ñ J
ô J
ñ F
ô F
ò 
ð 	
r   c                 ó.   — |                       |¦  «         S r	   )rl   rj   s     r   Ú__ne__zHTTPHeaderDict.__ne__¯   s   € Ø—;’;˜uÑ%Ô%Ð%Ð%r   c                 ó*   — t          | j        ¦  «        S r	   )r3   r&   r   s    r   r<   zHTTPHeaderDict.__len__¸   s   € Ý�4”?Ñ#Ô#Ð#r   c              #   óV   K  — | j                              ¦   «         D ]}|d         V — Œd S )Nr   )r&   rC   )r   Úvalss     r   r?   zHTTPHeaderDict.__iter__»   s<   è è € à”O×*Ò*Ñ,Ô,ð 	ð 	ˆDØ�q”'ˆMˆMˆMˆMð	ð 	r   c                 óV   — 	 | |         }| |= |S # t           $ r || j        u r‚ |cY S w xY w)z§D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
        If key is not found, d is returned if given, otherwise KeyError is raised.
        )ÚKeyErrorÚ_HTTPHeaderDict__marker)r   r,   Údefaultr5   s       r   r+   zHTTPHeaderDict.popÀ   sT   € ð	Ø˜”IˆEð �S�	ØˆLøõ ð 	ð 	ð 	Ø˜$œ-Ð'Ð'ØØˆNˆNˆNð	øøøs   ‚ �(§(c                 ó0   — 	 | |= d S # t           $ r Y d S w xY wr	   )rs   rZ   s     r   ÚdiscardzHTTPHeaderDict.discardÑ   s4   € ð	Ø�S�	�	�	øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ ‡
”c                 ó¢   — |                      ¦   «         }||g}| j                             ||¦  «        }||ur|                     |¦  «         dS dS )zâAdds a (name, value) pair, doesn't overwrite the value if it already
        exists.

        >>> headers = HTTPHeaderDict(foo='bar')
        >>> headers.add('Foo', 'baz')
        >>> headers['foo']
        'bar, baz'
        N)rR   r&   Ú
setdefaultÚappend)r   r,   rT   Ú	key_lowerÚnew_valsrq   s         r   ÚaddzHTTPHeaderDict.add×   s\   € ð —I’I‘K”Kˆ	Ø˜�:ˆàŒ×)Ò)¨)°XÑ>Ô>ˆØ˜4ÐÐØ�KŠK˜ÑÔÐÐÐð  Ðr   c                 óâ  — t          |¦  «        dk    r/t          d                     t          |¦  «        ¦  «        ¦  «        ‚t          |¦  «        dk    r|d         nd}t          |t          ¦  «        r1|                     ¦   «         D ]\  }}|                      ||¦  «         Œn™t          |t          ¦  «        r"|D ]}|                      |||         ¦  «         Œnbt          |d¦  «        r4| 	                    ¦   «         D ]}|                      |||         ¦  «         Œn|D ]\  }}|                      ||¦  «         Œ| 
                    ¦   «         D ]\  }}|                      ||¦  «         ŒdS )zÀGeneric import function for any type of header-like object.
        Adapted version of MutableMapping.update in order to insert items
        with self.add instead of self.__setitem__
        r   z9extend() takes at most 1 positional arguments ({0} given)r   r
   rE   N)r3   Ú	TypeErrorÚformatrJ   r   Ú	iteritemsr}   r   rf   rE   Úitems)r   ÚargsrN   rk   r,   rT   r5   s          r   rL   zHTTPHeaderDict.extendç   s—  € õ
 ˆt‰9Œ9�qŠ=ˆ=Ýð(ß(.ª­s°4©y¬yÑ(9Ô(9ñô ð õ ˜t™9œ9¨š>˜>��Q”�¨rˆå�e�^Ñ,Ô,ð 	%Ø!ŸOšOÑ-Ô-ð #ð #‘��SØ—’˜˜cÑ"Ô"Ð"Ð"ð#å˜�wÑ'Ô'ð 	%Øð *ð *�Ø—’˜˜e CœjÑ)Ô)Ð)Ð)ð*å�U˜FÑ#Ô#ð 	%Ø—z’z‘|”|ð *ð *�Ø—’˜˜e CœjÑ)Ô)Ð)Ð)ð*ð $ð %ð %‘
��UØ—’˜˜eÑ$Ô$Ð$Ð$à Ÿ,š,™.œ.ð 	!ð 	!‰JˆC�Ø�HŠH�S˜%Ñ Ô Ð Ð ð	!ð 	!r   c                 ó”   — 	 | j         |                     ¦   «                  }|dd…         S # t          $ r || j        u rg cY S |cY S w xY w)zmReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.r   N)r&   rR   rs   rt   )r   r,   ru   rq   s       r   ÚgetlistzHTTPHeaderDict.getlist  sf   € ð	Ø”? 3§9¢9¡;¤;Ô/ˆDð ˜˜˜”8ˆOøõ ð 	ð 	ð 	Ø˜$œ-Ð'Ð'Ø�	�	�	ØˆNˆNˆNð	øøøs   ‚+ «AÁAÁAc                 óB   — g d¢}|D ]}|                       |¦  «         Œ| S )z–
        Remove content-specific header fields before changing the request
        method to GET or HEAD according to RFC 9110, Section 15.4.
        )zContent-EncodingzContent-LanguagezContent-LocationzContent-TypezContent-LengthÚDigestzLast-Modified)rw   )r   Úcontent_specific_headersÚheaders      r   Ú_prepare_for_method_changez)HTTPHeaderDict._prepare_for_method_change  s?   € ð
$
ð $
ð $
Ð ð /ð 	!ð 	!ˆFØ�LŠL˜Ñ Ô Ð Ð Øˆr   c                 ót   — t          | ¦  «        j        ›dt          |                      ¦   «         ¦  «        ›d�S )Nú(ú))rg   r   rh   ri   r   s    r   Ú__repr__zHTTPHeaderDict.__repr__)  s4   € Ý ™:œ:Ô.Ð.Ð.µ°T·_²_Ñ5FÔ5FÑ0GÔ0GÐ0GÐ0GÐHÐHr   c                 óÂ   — |D ][}|                      |¦  «        }t          |t          ¦  «        rt          |¦  «        }|g|z   | j        |                     ¦   «         <   Œ\d S r	   )r…   rJ   rA   r&   rR   )r   rk   r,   rT   s       r   rK   zHTTPHeaderDict._copy_from,  sf   € Øð 	7ð 	7ˆCØ—-’- Ñ$Ô$ˆCÝ˜#�tÑ$Ô$ð  å˜3‘i”i�Ø,/¨5°3©;ˆDŒO˜CŸIšI™KœKÑ(Ð(ð	7ð 	7r   c                 ó^   —  t          | ¦  «        ¦   «         }|                     | ¦  «         |S r	   )rg   rK   )r   Úclones     r   ÚcopyzHTTPHeaderDict.copy4  s,   € Ø•�T‘
”
‘”ˆØ×Ò˜ÑÔÐØˆr   c              #   ó„   K  — | D ]:}| j         |                     ¦   «                  }|dd…         D ]}|d         |fV — ŒŒ;dS )z8Iterate over all header lines, including duplicate ones.r   Nr   rQ   )r   r,   rq   rT   s       r   r�   zHTTPHeaderDict.iteritems9  sf   è è € àð 	#ð 	#ˆCØ”? 3§9¢9¡;¤;Ô/ˆDØ˜A˜B˜B”xð #ð #�Ø˜1”g˜s�lÐ"Ð"Ð"Ð"ð#ð	#ð 	#r   c              #   ó    K  — | D ]H}| j         |                     ¦   «                  }|d         d                     |dd…         ¦  «        fV — ŒIdS )z:Iterate over all headers, merging duplicate ones together.r   rV   r   NrW   rS   s      r   ri   zHTTPHeaderDict.itermerged@  s_   è è € àð 	-ð 	-ˆCØ”/ #§)¢)¡+¤+Ô.ˆCØ�a”&˜$Ÿ)š) C¨¨¨¤GÑ,Ô,Ð,Ð,Ð,Ð,Ð,ð	-ð 	-r   c                 óD   — t          |                      ¦   «         ¦  «        S r	   )rA   r�   r   s    r   r‚   zHTTPHeaderDict.itemsF  s   € Ý�D—N’NÑ$Ô$Ñ%Ô%Ð%r   c                 ó`  — d}g }|j         D ]˜}|                     |¦  «        r?|st          d|z  ¦  «        ‚|d         \  }}||dz   |                     ¦   «         z   f|d<   ŒV|                     dd¦  «        \  }}|                     ||                     ¦   «         f¦  «         Œ™ | |¦  «        S )z4Read headers from a Python 2 httplib message object.)ú ú	z/Header continuation with no previous header: %séÿÿÿÿr—   ú:r   )rM   Ú
startswithr   ÚstripÚsplitrz   )ÚclsÚmessageÚobs_fold_continued_leadersrM   Úliner,   r5   s          r   Úfrom_httplibzHTTPHeaderDict.from_httplibI  sÑ   € ð &1Ð"Øˆà”Oð 	1ð 	1ˆDØ�ŠÐ9Ñ:Ô:ð Øð 
õ (ØIÈDÑPñô ð ð ")¨¤‘J�C˜Ø#&¨°©°d·j²j±l´lÑ(BÐ"C�G˜B‘KØàŸš C¨Ñ+Ô+‰JˆC�Ø�NŠN˜C §¢¡¤Ð/Ñ0Ô0Ð0Ð0àˆs�7‰|Œ|Ðr   r	   )'r   r   r   rF   r)   r8   r.   r:   r\   rl   rn   ÚsixÚPY2r   r   r   Úobjectrt   r<   r?   r+   rw   r}   rL   r…   rŠ   Ú
getheadersÚgetallmatchingheadersÚigetÚget_allrŽ   rK   r’   r�   ri   r‚   Úclassmethodr¢   Ú__classcell__)rO   s   @r   r   r   k   sæ  ø€ € € € € ðð ðB	 ð 	 ð 	 ð 	 ð 	 ð 	 ð,ð ,ð ,ð"ð "ð "ð)ð )ð )ð.ð .ð .ð
ð 
ð 
ð&ð &ð &ð „wð /Ø!Ô*ˆØ#Ô.ˆ
àˆv‰xŒx€Hð$ð $ð $ðð ð ð
  (ð ð ð ð ð"ð ð ðð ð ð !ð !ð !ð8 $,ð 
ð 
ð 
ð 
ðð ð ð& €JØ#ÐØ€Dð €GðIð Ið Ið7ð 7ð 7ðð ð ð
#ð #ð #ð-ð -ð -ð&ð &ð &ð ðð ñ „[ðð ð ð ð r   )Ú
__future__r   Úcollections.abcr   r   ÚImportErrorÚcollectionsÚ	threadingr   r   Ú
exceptionsr   r£   r   r   Ú__all__r¥   r1   r   r   r
   r   r   ú<module>r³      s§  ðØ &Ð &Ð &Ð &Ð &Ð &ð4Ø7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7øØð 4ð 4ð 4Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð4øøøð	ØÐÐÐÐÐÐøØð ð ð ðð ð ð ð ñ ô ð ð ð ðøøøð $Ð #Ð #Ð #Ð #Ð #à %Ð %Ð %Ð %Ð %Ð %Ø 
€
€
€
Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à"Ð$4Ð
5€ð 	ˆ‰Œ€ðI3ð I3ð I3ð I3ð I3˜Nñ I3ô I3ð I3ðXxð xð xð xð x�^ñ xô xð xð xð xs   ˆ ‘! !¥, ¬AÁ A