
    *Gj?^                        U d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ d	Z e
d
          Z G d de          Z G d de	e                   Z G d d          Z G d d          Z G d de          Z e            Z ee         e!d<    G d de	e                   Z" G d de"e                   Z#dS )    N)	AwaitableCallable)FinalGenericTypeVar   )BaseProtocol)_EXC_SENTINELDEFAULT_CHUNK_SIZEBaseTimerContext	TimerNoopset_exception
set_result)LineTooLong)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueue_Tc                       e Zd ZdZdS )r   zeof stream indication.N)__name__
__module____qualname____doc__     W/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/streams.pyr   r      s            r   r   c                   R    e Zd ZdZdeg ee         f         ddfdZd	dZdefdZ	dS )
AsyncStreamIterator	read_funcr"   returnNc                     || _         d S Nr!   )selfr"   s     r   __init__zAsyncStreamIterator.__init__&   s    "r   AsyncStreamIterator[_T]c                     | S r%   r   r&   s    r   	__aiter__zAsyncStreamIterator.__aiter__)       r   c                    K   	 |                                   d {V }n# t          $ r t          w xY w|dk    rt          |S Nr   )r"   r   StopAsyncIterationr&   rvs     r   	__anext__zAsyncStreamIterator.__anext__,   sc      	%~~''''''''BB 	% 	% 	%$$	%99$$	s    1)r#   r(   )
r   r   r   	__slots__r   r   r   r'   r+   r2   r   r   r   r    r    "   sx        I#(2y}+<"= #$ # # # #         r   r    c                   >    e Zd ZdZd	dZd
dZdeeef         fdZ	dS )ChunkTupleAsyncStreamIterator_streamstreamr   r#   Nc                     || _         d S r%   r6   )r&   r8   s     r   r'   z&ChunkTupleAsyncStreamIterator.__init__:   s    r   c                     | S r%   r   r*   s    r   r+   z'ChunkTupleAsyncStreamIterator.__aiter__=   r,   r   c                 b   K   | j                                          d {V }|dk    rt          |S )Nr   F)r7   	readchunkr/   r0   s     r   r2   z'ChunkTupleAsyncStreamIterator.__anext__@   sA      <))++++++++$$	r   )r8   r   r#   N)r#   r5   )
r   r   r   r3   r'   r+   tuplebytesboolr2   r   r   r   r5   r5   6   se        I      ud{!3      r   r5   c                   p   e Zd ZdZdZddddedededz  dej	        dz  d	df
d
Z
d	efdZd	ee         fdZded	ee         fdZd	ee         fdZd	efdZd	eeef         fdZded	dfdZd	edz  fdZefdeded	dfdZdeg df         d	dfdZd7dZd	efdZd	efdZ d7dZ!e"d	efd            Z#ded	dfdZ$d8ded!ed	efd"Z%d7d#Z&d7d$Z'd%ed	dfd&Z(dd'd(edz  d	efd)Z)	 d9dd+d,ed-edz  d	efd.Z*d:ded	efd0Z+d	efd1Z,d	eeef         fd2Z-ded	efd3Z.d:ded	efd4Z/ded	efd5Z0ded	efd6Z1dS );r   a*  An enhancement of asyncio.StreamReader.

    Supports asynchronous iteration by line, chunk or as available::

        async for line in reader:
            ...
        async for chunk in reader.iter_chunked(1024):
            ...
        async for slice in reader.iter_any():
            ...

    )	_protocol
_low_water_high_water_low_water_chunks_high_water_chunks_loop_size_cursor_http_chunk_splits_buffer_buffer_offset_eof_waiter_eof_waiter
_exception_timer_eof_callbacks_eof_countertotal_bytestotal_compressed_bytesN)timerloopprotocollimitrV   rW   r#   c                   || _         || _        |dz  | _        |t          j                    }t          d|dz            | _        | j        dz  | _        || _        d| _	        d| _
        d | _        t          j                    | _        d| _        d| _        d | _        d | _        d | _        |t)                      n|| _        g | _        d| _        d| _        d | _        d S )N         r   F)rB   rC   rD   asyncioget_event_loopmaxrF   rE   rG   rH   rI   rJ   collectionsdequerK   rL   rM   rN   rO   rP   r   rQ   rR   rS   rT   rU   )r&   rX   rY   rV   rW   s        r   r'   zStreamReader.__init__l   s     " 19<)++D #&a""5"5!%!8A!=

AE1<1B1D1D	488<04%*]ikkk8:26###r   c                    | j         j        g}| j        r|                    d| j        z             | j        r|                    d           | j        t          k    r$|                    d| j        | j        fz             | j        r|                    d| j        z             | j	        r|                    d| j	        z             dd
                    |          z  S )Nz%d byteseofzlow=%d high=%dzw=%rze=%r<%s> )	__class__r   rH   appendrM   rC   r   rD   rN   rP   join)r&   infos     r   __repr__zStreamReader.__repr__   s    '(: 	1KK
TZ/0009 	KK?000KK(DOT=M+NNOOO< 	/KK-...? 	2KK0111&&r   c                 *    t          | j                  S r%   )r    readliner*   s    r   r+   zStreamReader.__aiter__   s    "4=111r   nc                 V                                      t           fd          S )z>Returns an asynchronous iterator that yields chunks of size n.c                  .                                    S r%   )read)rn   r&   s   r   <lambda>z+StreamReader.iter_chunked.<locals>.<lambda>   s    499Q<< r   )set_read_chunk_sizer    r&   rn   s   ``r   iter_chunkedzStreamReader.iter_chunked   s3      ###"#7#7#7#7#7888r   c                 *    t          | j                  S )z3Yield all available data as soon as it is received.)r    readanyr*   s    r   iter_anyzStreamReader.iter_any   s    "4<000r   c                      t          |           S )zYield chunks of data as they are received by the server.

        The yielded objects are tuples
        of (bytes, bool) as returned by the StreamReader.readchunk method.
        )r5   r*   s    r   iter_chunkszStreamReader.iter_chunks   s     -T222r   c                     | j         | j        fS r%   rC   rD   r*   s    r   get_read_buffer_limitsz#StreamReader.get_read_buffer_limits   s    !122r   c                 B    || j         k    r|| _         |dz  | _        dS dS )z7Raise buffer limits to match the consumer's chunk size.r[   Nr|   rt   s     r   rs   z StreamReader.set_read_chunk_size   s0    tDO 1uD r   c                     | j         S r%   rP   r*   s    r   	exceptionzStreamReader.exception   
    r   exc	exc_causec                     || _         | j                                         | j        }|d | _        t	          |||           | j        }|d | _        t	          |||           d S d S r%   )rP   rR   clearrN   r   rO   r&   r   r   waiters       r   r   zStreamReader.set_exception   s|    
 !!###DL&#y111!#D&#y11111 r   callbackc                     | j         r2	  |             d S # t          $ r t          j        d           Y d S w xY w| j                            |           d S NException in eof callback)rM   	Exceptionr   r   rR   rh   r&   r   s     r   on_eofzStreamReader.on_eof   sz    9 	1G




 G G G)*EFFFFFFG &&x00000s   
 77c                 n   d| _         | j        }|d | _        t          |d            | j        }|d | _        t          |d            | j                            d           | j        D ]1}	  |             # t          $ r t          j	        d           Y .w xY w| j        
                                 d S )NTF)resume_parserr   )rM   rN   r   rO   rB   resume_readingrR   r   r   r   r   )r&   r   cbs      r   feed_eofzStreamReader.feed_eof   s    	DLvt$$$!#Dvt$$$ 	%%E%:::% 	G 	GBG G G G)*EFFFFFG 	!!#####s   -
A88BBc                     | j         S )z&Return True if  'feed_eof' was called.rM   r*   s    r   is_eofzStreamReader.is_eof   s
    yr   c                      | j         o| j         S )z=Return True if the buffer is empty and 'feed_eof' was called.rM   rK   r*   s    r   at_eofzStreamReader.at_eof   s    y---r   c                    K   | j         rd S | j        J | j                                        | _        	 | j         d {V  d | _        d S # d | _        w xY wr%   )rM   rO   rG   create_futurer*   s    r   wait_eofzStreamReader.wait_eof   s|      9 	F''':3355	$""""""""#DtD####s   A
 
	Ac                 ,    | j         | j        S | j         S r%   )rU   rT   r*   s    r   total_raw_byteszStreamReader.total_raw_bytes  s    &.##**r   datac                 \   t          j        dt          d           |sdS | j        r)| j        d         | j        d         | j        d<   d| _        | xj        t          |          z  c_        | xj        t          |          z  c_        | j                            |           d| _	        dS )zDrollback reading some data from stream, inserting it to buffer head.zJunread_data() is deprecated and will be removed in future releases (#3260)r[   )
stacklevelNr   )
warningswarnDeprecationWarningrL   rK   rH   lenrI   
appendleftrS   )r&   r   s     r   unread_datazStreamReader.unread_data  s    =		
 	
 	
 	
  	F 	$"l1od.A.C.CDDLO"#D

c$ii

D		!%%%r   r   sizec                 T   | j         r
J d            |sdS t          |          }| xj        |z  c_        | j                            |           | xj        |z  c_        | j        }|d | _        t          |d            | j        | j        k    r| j	        
                                 dS )Nzfeed_data after feed_eofF)rM   r   rH   rK   rh   rT   rN   r   rD   rB   pause_reading)r&   r   r   data_lenr   s        r   	feed_datazStreamReader.feed_data  s    988888} 	5t99

h

D!!!H$DLvt$$$:(((N((***ur   c                 t    | j         0| j        rt          d          t          j                    | _         d S d S )Nz@Called begin_http_chunk_receiving when some data was already fed)rJ   rT   RuntimeErrorra   rb   r*   s    r   begin_http_chunk_receivingz'StreamReader.begin_http_chunk_receiving0  sL    "* "V   '2&7&9&9D### +*r   c                 f   | j         t          d          | j         r| j         d         nd}| j        |k    rd S | j                             | j                   t	          | j                   | j        k    r| j                                         | j        }|d | _        t          |d            d S d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )
rJ   r   rT   rh   r   rF   rB   r   rN   r   )r&   posr   s      r   end_http_chunk_receivingz%StreamReader.end_http_chunk_receiving8  s    "*.   .2-DKd%b))!s"" F&&t'7888
 t&''$*AAAN((*** DLvt$$$$$ r   	func_namec                 (  K   | j         j        st          d          | j        t          d|z            | j                                        x}| _        	 | j        5  | d {V  d d d            n# 1 swxY w Y   d | _        d S # d | _        w xY w)NzConnection closed.zH%s() called while another coroutine is already waiting for incoming data)rB   	connectedr   rN   rG   r   rQ   )r&   r   r   s      r   _waitzStreamReader._wait\  s      ~' 	53444 <#46?@  
 !%
 8 8 : ::	                   DLLL4DLs0   B 	A4(B 4A88B ;A8<B 	Bmax_line_lengthr   c                >   K   |                      |           d {V S )Nmax_size)	readuntilr&   r   s     r   rm   zStreamReader.readlineq  s,      ^^_^=========r      
r   	separatorr   c                  K   t          |          }|dk    rt          d          | j        | j        d}d}d}|p| j        }|r| j        r|r| j        }| j        d                             ||          dz   }|                     |r||z
  |z   dz
  nd          }	||	z  }|t          |	          z  }|rd}||k    rt          |d d         d	z   |          | j        r|| j	        rn|r| 
                    d
           d {V  ||S )Nr   z,Separator should be at least one-byte stringr   Tr   r   Fd   s   ...r   )r   
ValueErrorrP   rD   rK   rL   find_read_nowait_chunkr   rM   r   )
r&   r   r   seplenchunk
chunk_size
not_enoughoffseticharr   s
             r   r   zStreamReader.readuntilt  s{      YQ;;KLLL?&/!

/t/ 	., F: F,Q,,Y??!C..38@EFNV+a//b  c$ii'
 '!&J((%eDSDkF&:HEEE , F: F y  .jj---------)  	., r   r   c                 ^  K   | j         | j         	 | j        rA| j        s:t          | dd          dz   | _        | j        dk    rt          j        dd           |sdS |dk     rj|                     t          j	                   g }	 | 
                                 d {V }|sn|                    |           3d                    |          S |                     |           | j        s0| j        s)|                     d	           d {V  | j        s| j        )|                     |          S )
NTrS   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor   rq   )rP   rM   rK   getattrrS   r   warningrs   sysmaxsizerw   rh   ri   r   _read_nowait)r&   rn   blocksblocks       r   rq   zStreamReader.read  s|     ?&/!	y  $+D.!$D$Dq$H!$q((#+2#'     	3q55$$S[111F%"llnn,,,,,, e$$$	%
 88F###  ### , 	%ty 	%**V$$$$$$$$$ , 	%ty 	%   ###r   c                    K   | j         | j         | j        s0| j        s)|                     d           d {V  | j        s| j        )|                     d          S )Nrw   r   )rP   rK   rM   r   r   r*   s    r   rw   zStreamReader.readany  sz      ?&/!
 , 	(ty 	(**Y''''''''' , 	(ty 	(   $$$r   c                   K   	 | j         | j         | j        rk| j                                        }|| j        k    rdS || j        k    r|                     || j        z
            dfS t          j        d           | j        k| j        r|                     d          dfS | j	        rdS | 
                    d           d{V  )	a  Returns a tuple of (data, end_of_http_chunk).

        When chunked transfer
        encoding is used, end_of_http_chunk is a boolean indicating if the end
        of the data corresponds to the end of a HTTP chunk , otherwise it is
        always False.
        TNr   TzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr   Fr<   r=   )rP   rJ   popleftrI   r   r   r   rK   r   rM   r   )r&   r   s     r   r=   zStreamReader.readchunk  s     	**o%) 	-5577$,&&&;%% --cDL.@AA4HH'8   ) 	 | <//33U;; y $ $|**[)))))))))1	*r   c                 d  K   | j         | j         g }|dk    r|                     |           d {V }|s:d                    |          }t          j        |t          |          |z             |                    |           |t          |          z  }|dk    d                    |          S )Nr   r   )rP   rq   ri   r^   IncompleteReadErrorr   rh   )r&   rn   r   r   partials        r   readexactlyzStreamReader.readexactly  s      ?&/! !ee))A,,&&&&&&E M((6**1'3w<<!;KLLLMM%   UOA !ee xxr   c                     | j         | j         | j        r(| j                                        st          d          |                     |          S )Nz9Called while some coroutine is waiting for incoming data.)rP   rN   doner   r   rt   s     r   read_nowaitzStreamReader.read_nowait  s^    
 ?&/!< 	 1 1 3 3 	K     ###r   c                    | j         d         }| j        }|dk    r4t          |          |z
  |k    r||||z            }| xj        |z  c_        nF|r+| j                                          ||d          }d| _        n| j                                         }t          |          }| xj        |z  c_        | xj        |z  c_        | j        }|r8|d         | j        k     r'|                                 |r|d         | j        k     '| j        | j        k     r=| j        t          | j                  | j        k     r| j	        
                                 |S )Nr   r   )rK   rL   r   r   rH   rI   rJ   rC   rE   rB   r   )r&   rn   first_bufferr   r   r   chunk_splitss          r   r   zStreamReader._read_nowait_chunk  sl   |A$77s<((61A55! 34D1$ 	*L  """(D"#D <''))Dt99

h

 . 	#|A==  """  	#|A== :''#+4*++d.DDDN))+++r   c                      j                                          |dk    r]t           j                  }|dk    r                     d          S d                     fdt          |          D                       S g } j        rJ                     |          }|                    |           |t          |          z  }|dk    rn j        J|rd                    |          ndS )z6Read not more than n bytes, or whole buffer if n == -1r   r   r   c                 :    g | ]}                     d           S r   )r   ).0_r&   s     r   
<listcomp>z-StreamReader._read_nowait.<locals>.<listcomp>9  s'    OOOQT44R88OOOr   r   )rQ   assert_timeoutr   rK   r   ri   rangerh   )r&   rn   countchunksr   s   `    r   r   zStreamReader._read_nowait/  s    ""$$$77 %%Ezz..r22288OOOO%,,OOOPPP l 	++A..EMM%   UOAAvv l 	 $*2sxxs2r   r#   Nr   )r   r   )2r   r   r   r   r3   r	   intr   r^   AbstractEventLoopr'   strrk   r    r?   r+   ru   rx   r5   rz   r>   r}   rs   BaseExceptionr   r
   r   r   r   r   r@   r   r   r   propertyr   r   r   r   r   r   rm   r   rq   rw   r=   r   r   r   r   r   r   r   r   r   G   s        I8 *.15 7  7  7 7  7
  $& 7 '$. 7 
 7  7  7  7D'# ' ' ' '2.u5 2 2 2 29c 9&9%&@ 9 9 9 9
1-e4 1 1 1 13: 3 3 3 33c3h 3 3 3 3%S %T % % % %=4/     $12 22 !2 
	2 2 2 2$1xD1 1d 1 1 1 1$ $ $ $0    . . . . .	$ 	$ 	$ 	$ + + + + X+
 $    ( e 3 t    (: : : :"% "% "% "%H S  T        * ?C > > >t >u > > > > "'%BF% % %%584Z%	% % % %N'$ '$C '$ '$ '$ '$ '$R
%u 
% 
% 
% 
% *ud{!3  *  *  *  *D 3  5        $ $S $% $ $ $ $C E    >3c 3e 3 3 3 3 3 3r   r   c                   6   e Zd ZdZddZdefdZdedz  fdZe	fdededdfd	Z
d
eg df         ddfdZddZdefdZdefdZddZddededefdZdeddfdZdddedz  defdZd dedefdZdefdZdeeef         fdZdedefdZd dedefdZdS )!EmptyStreamReader_read_eof_chunkr#   Nc                 "    d| _         d| _        d S )NFr   )r   rT   r*   s    r   r'   zEmptyStreamReader.__init__J  s    $r   c                      d| j         j        z  S )Nre   )rg   r   r*   s    r   rk   zEmptyStreamReader.__repr__N  s    ///r   c                     d S r%   r   r*   s    r   r   zEmptyStreamReader.exceptionQ      tr   r   r   c                     d S r%   r   )r&   r   r   s      r   r   zEmptyStreamReader.set_exceptionT  s	    
 	r   r   c                 f    	  |             d S # t           $ r t          j        d           Y d S w xY wr   )r   r   r   r   s     r   r   zEmptyStreamReader.on_eof[  sQ    	CHJJJJJ 	C 	C 	C%&ABBBBBB	Cs   
 00c                     d S r%   r   r*   s    r   r   zEmptyStreamReader.feed_eofa  s    r   c                     dS NTr   r*   s    r   r   zEmptyStreamReader.is_eofd  r   r   c                     dS r  r   r*   s    r   r   zEmptyStreamReader.at_eofg  r   r   c                 
   K   d S r%   r   r*   s    r   r   zEmptyStreamReader.wait_eofj  s      r   r   r   rn   c                     dS NFr   )r&   r   rn   s      r   r   zEmptyStreamReader.feed_datam  s    ur   c                     d S r%   r   rt   s     r   rs   z%EmptyStreamReader.set_read_chunk_sizep  s    r   r   r   c                
   K   dS r.   r   r   s     r   rm   zEmptyStreamReader.readlines        sr   r   c                 
   K   dS r.   r   rt   s     r   rq   zEmptyStreamReader.readv  r	  r   c                 
   K   dS r.   r   r*   s    r   rw   zEmptyStreamReader.readany{  r	  r   c                 *   K   | j         s	d| _         dS dS )NTr<   r   r   r*   s    r   r=   zEmptyStreamReader.readchunk~  s#      # 	 #'D <{r   c                 0   K   t          j        d|          r.   )r^   r   rt   s     r   r   zEmptyStreamReader.readexactly  s      )#q111r   c                     dS r.   r   rt   s     r   r   zEmptyStreamReader.read_nowait  s    sr   r   r   r   )r   r   r   r3   r'   r   rk   r   r   r
   r   r   r   r   r@   r   r   r   r?   r   r   rs   rm   rq   rw   r>   r=   r   r   r   r   r   r   r   F  sf       $I   0# 0 0 0 0=4/     $1  ! 
	   CxD1 Cd C C C C               e  D    S T     ?C   t u     C     
u    ud{!3    23 25 2 2 2 2 S %      r   r   r   c                       e Zd ZdZdej        ddfdZdefdZde	fdZ
de	fdZdedz  fd	Zefd
ededdfdZddededdfdZddZdefdZdee         fdZdS )r   z>DataQueue is a general-purpose blocking queue with one reader.rW   r#   Nc                 n    || _         d| _        d | _        d | _        t	          j                    | _        d S r  )rG   rM   rN   rP   ra   rb   rK   )r&   rW   s     r   r'   zDataQueue.__init__  s2    
	4804:E:K:M:Mr   c                 *    t          | j                  S r%   )r   rK   r*   s    r   __len__zDataQueue.__len__  s    4<   r   c                     | j         S r%   r   r*   s    r   r   zDataQueue.is_eof  s
    yr   c                      | j         o| j         S r%   r   r*   s    r   r   zDataQueue.at_eof  s    y---r   c                     | j         S r%   r   r*   s    r   r   zDataQueue.exception  r   r   r   r   c                 h    d| _         || _        | j        x}d | _        t          |||           d S d S r  )rM   rP   rN   r   r   s       r   r   zDataQueue.set_exception  sF    
 	l"F/DL&#y11111 0/r   r   r   r   c                     | j                             ||f           | j        x}d | _        t          |d            d S d S r%   )rK   rh   rN   r   )r&   r   r   r   s       r   r   zDataQueue.feed_data  sN    T4L)))l"F/DLvt$$$$$ 0/r   c                 X    d| _         | j        x}d | _        t          |d            d S d S r  )rM   rN   r   )r&   r   s     r   r   zDataQueue.feed_eof  s;    	l"F/DLvt$$$$$ 0/r   c                 P  K   | j         sd| j        s]| j        rJ | j                                        | _        	 | j         d {V  n'# t
          j        t
          j        f$ r	 d | _         w xY w| j         r| j                                         \  }}|S | j	        | j	        t          r%   )rK   rM   rN   rG   r   r^   CancelledErrorTimeoutErrorr   rP   r   )r&   r   r   s      r   rq   zDataQueue.read  s      | 	DI 	|###:3355DLl""""""""*G,@A   # < 	l**,,GD!K?&/!   A $A+c                 *    t          | j                  S r%   )r    rq   r*   s    r   r+   zDataQueue.__aiter__  s    "49---r   r   r   )r   r   r   r   r^   r   r'   r   r  r@   r   r   r   r   r
   r   r   r   r   rq   r    r+   r   r   r   r   r     sn       HHNW6 N4 N N N N! ! ! ! !    . . . . .=4/     $1	2 	2	2 !	2 
		2 	2 	2 	2% %b % %D % % % %% % % %B     ..r2 . . . . . .r   r   c                   d     e Zd ZdZdededej        ddf fdZdd	e	d
eddf fdZ
de	fdZ xZS )FlowControlDataQueuezFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.

    This class is deprecated and will be removed in version 4.0.
    rX   rY   rW   r#   Nc                |    t                                          |           d| _        || _        |dz  | _        d S )N)rW   r   r[   )superr'   rH   rB   _limit)r&   rX   rY   rW   rg   s       r   r'   zFlowControlDataQueue.__init__  s=     	d###
!air   r   r   r   c                     t                                          ||           | xj        |z  c_        | j        | j        k    r'| j        j        s| j                                         d S d S d S r%   )r!  r   rH   r"  rB   _reading_pausedr   )r&   r   r   rg   s      r   r   zFlowControlDataQueue.feed_data  sn    $%%%

d

:##DN,J#N((***** $###r   c                   K   | j         sd| j        s]| j        rJ | j                                        | _        	 | j         d {V  n'# t
          j        t
          j        f$ r	 d | _         w xY w| j         rc| j                                         \  }}| xj	        |z  c_	        | j	        | j
        k     r%| j        j        r| j                                         |S | j        | j        t          r%   )rK   rM   rN   rG   r   r^   r  r  r   rH   r"  rB   r$  r   rP   r   )r&   r   r   s      r   rq   zFlowControlDataQueue.read  s     | 	DI 	|###:3355DLl""""""""*G,@A   # < 	--//JD$JJ$JJzDK''DN,J'--///K?&/!r  r   )r   r   r   r   r	   r   r^   r   r'   r   r   rq   __classcell__)rg   s   @r   r  r    s          $ -0 ;B;T 	           + +b + +D + + + + + +B        r   r  )$r^   ra   r   r   collections.abcr   r   typingr   r   r   base_protocolr	   helpersr
   r   r   r   r   r   http_exceptionsr   logr   __all__r   r   r   r    r5   r   r   r   __annotations__r   r  r   r   r   <module>r/     sm        



  / / / / / / / / * * * * * * * * * * ' ' ' ' ' '                ) ( ( ( ( (             WT]]! ! ! ! !	 ! ! !    '"+   (       "|3 |3 |3 |3 |3 |3 |3 |3~C C C C C C C CL &7%6%8%8u\" 8 8 8>. >. >. >. >. >. >. >.B( ( ( ( (9R= ( ( ( ( (r   