
    i *                   (   d dl mZ 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	 d dlm
Z
mZ d dlmZ 	 d dlZddlmZ n# eef$ r dZdZY nw xY w	 d d	lmZ n# eef$ r dZY nw xY wdd
lmZ ddlmZmZmZmZ ddlmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC ejD        rddlEmFZF  eGed          ZH e	d          dd            ZI G d de=          ZJdS )    )annotationsN)datetimetimezone)	lru_cache)
SOCK_DGRAMSOCK_STREAM)timeout   )SSLTransport)Certificate)HTTPHeaderDict)DEFAULT_BLOCKSIZEDEFAULT_KEEPALIVE_DELAYUDP_DEFAULT_BLOCKSIZE	responses)HTTP1ProtocolHTTP2ProtocolHTTP3ProtocolHTTPOverQUICProtocolHTTPOverTCPProtocolHTTPProtocolFactoryQuicTLSConfig)ConnectionTerminatedDataReceivedEarlyHeadersReceivedEventHandshakeCompletedHeadersReceivedStreamResetReceived)_sock_has_gro_sock_has_gsosync_recv_grosync_sendmsg_gso)EarlyResponseIncompleteReadInvalidHeaderMustDowngradeErrorProtocolErrorResponseNotReadySSLError)parse_alt_svcresolve_cert_reqs   )BaseBackendConnectionInfoDirectStreamAccessHttpVersionLowLevelResponseQuicPreemptiveCacheTypeResponsePromise)_TYPE_SOCKET_OPTIONSaudit)maxsizereturnboolc                     ddl m}  | rdS dd l}	 |j                            d          d uS # t
          t          t          f$ r Y dS w xY w)Nr
   )IS_FIPSFr   qh3)	util.ssl_r;   importlib.utilutil	find_specImportErrorModuleNotFoundError
ValueError)r;   	importlibs     W/root/projects/butler/venv/lib/python3.11/site-packages/urllib3_future/backend/hface.py_HAS_HTTP3_SUPPORTrF   S   sw    ###### u~''..d::,j9   uus   , AAc                      e Zd Zej        ej        ej        gZdddefe	j
        ddeddv fdZedwd            Zedxd            Zedwd            Zedxd            ZdydZdzd Z	 	 	 	 	 	 	 	 	 	 	 	 d{d|d3Zd}d~d6Zdzd7Z	 	 	 ddd<Zdzd=Zddd@Zd>ddAddddBddNZ	 	 dddSZddVZ	 dd>d>dWdd]Z	 dddbZddcZ	 	 dddhZ dddiddnZ!d>doddsZ"dzdtZ#dzduZ$ xZ%S )HfaceBackendNsocket_optionsdisabled_svnpreemptive_quic_cachekeepalive_delayhoststrport
int | Noner	   int | float | Nonesource_addresstuple[str, int] | None	blocksizeintrK   _TYPE_SOCKET_OPTIONS | NonerL   set[HttpVersion] | NonerM   QuicPreemptiveCacheType | NonerN   float | int | Nonec                  t                      s/|t                      }|                    t          j                   t                                          |||||||||		  	         d | _        d | _        d | _	        d | _
        g | _        d | _        d | _        d| _        d | _        d| _        d | _        d | _        d | _        d | _        d| _        d| _        d S )NrJ   F)rF   setaddr1   h3super__init___proxy_protocol	_protocol_svn
_stream_id_HfaceBackend__headers#_HfaceBackend__expected_body_length$_HfaceBackend__remaining_body_length _HfaceBackend__authority_bit_set _HfaceBackend__legacy_host_entry_HfaceBackend__protocol_bit_set"_HfaceBackend__custom_tls_settings_HfaceBackend__alt_authority_HfaceBackend__origin_port _max_tolerable_delay_for_upgrade_dgram_gro_enabled_dgram_gso_enabled)selfrO   rQ   r	   rT   rV   rK   rL   rM   rN   	__class__s             rE   ra   zHfaceBackend.__init__e   s    "## 	-#"uu[^,,,)%"7+ 	 
	
 
	
 
	
 <@LP(,	&* 5726#37$). 15 (- <@"7;)- ?C- ).(-    r8   r9   c                    | j         dS | j                                         du r| j                                         du S dS )NF)rc   is_availablehas_expiredrr   s    rE   is_saturatedzHfaceBackend.is_saturated   sH    >!5 >&&((E11>--//588urt   c                ,    | j         dS | j         j        S )Nr   )rc   max_stream_countrx   s    rE   r{   zHfaceBackend.max_stream_count   s    >!1~..rt   c                ,    | j         d uo| j         j        S N)rc   multiplexedrx   s    rE   is_multiplexedzHfaceBackend.is_multiplexed   s    ~T)Hdn.HHrt   c                    | j         | j        S 	 | j                                         }n# t          $ r
 | j        cY S w xY w| j        |k    r|n| j        S r}   )rc   rV   max_frame_sizeNotImplementedError)rr   remote_max_sizes     rE   r   zHfaceBackend.max_frame_size   so    >!>!	""n;;==OO" 	" 	" 	">!!!	" #'.?"B"BVs   * >>socket.socket | Nonec                J   | j         t          j        | j        vr| j        dk    r| j        r`| j        | j        f| j        v rK| j        | j        | j        pdf         | _        | j        r#t          j        | _         | j        d         | _        n^t          j	        | j        v rKt          j
        | j        v r8| j        | j        pdf| _        t          j        | _         | j        d         | _        | j         t          j        k    r{| j        t          k    rt          | _        t          | _        | j        rK| j        j        | j        k    r6d | _         d | _        | j        t          k    rt          | _        t$          | _        n(| j        t          k    rt          | _        t$          | _        d S )Nhttps  r-   )rd   r1   r_   _disabled_svnscheme_preemptive_quic_cacherO   rQ   rm   h11h2rV   r   r   r   socket_kind	_response	authorityr   rx   s    rE   	_new_connzHfaceBackend._new_conn   sy    Id&888w&& +4Y	*d.III'+'BY	 0S1($ ' = +DI%)%9!%<DI4#555Nd&888(,	493C'D$'N	 03	9&&~!222!6)D ~ /$.":di"G"G 	!%>%:::%6DN#. ~!666!2*Dtrt   Nonec                   | j         
J d            | j        J | j        J | j        d S t	                      }t          | j                  t          j        u }t          j        | j	        v }t          j
        | j	        v }d }|rA|s| j        t          j
        k    rd S t          j
        }|                     d          | _        n| j        t          j        k    rd S |du r+|du r't          j        }|                     d          | _        | j        s<| j        t          j
        k    r't          j
        }|                     d          | _        | j        r | j        | j        j        ~| j        j                                        | _        | j        j        ,| xj        | j        j                                        z  c_        | xj        dz  c_        | j        d	k    rd
| _        nd
| _        |t          j        k    r=| j        6| j        | j        | j        | j        pdf<   | j        | j        pdf| j        vrd S || _        | j        | _        | j        d         | _        |                                  d S d S )Nz<attempt to call _upgrade() prior to successful getresponse()h2c)svcFTr_   r   g      $@g{Gz?g      @r   r-   )r   sockrd   rm   rF   typesocketr1   r_   r   r   _HfaceBackend__altsvc_probe	conn_infoestablished_latencytotal_secondsro   tls_handshake_latencyr   rO   rQ   rn   close)rr   has_h3_supportis_plain_socketis_h3_disabledis_h2_disabledupgradable_svns         rE   _upgradezHfaceBackend._upgrade   s   ~))J *)) y$$$y$$$ +F ,-- ty//V]: %4+==$4+==-1 	E kn!<!<(^N#'#6#6 $7 $ $D   yKN**&&>T+A+A!,'+':':t':'D'D$ ' EDI,G,G!,'+':':t':'D'D$ $	
 *N6B N6DDFF 5 >7C99<JJLL99 55=55 8D@@<?D98;5//.:, /DI<L0MN 	49#34D<WWW&DI!%D,Q/DIJJLLLLLI$	 $	rt   ssl_contextssl.SSLContext | Noneca_certs
str | Noneca_cert_dirca_cert_dataNone | str | bytesssl_minimum_versionssl_maximum_version	cert_filestr | bytes | Nonekey_filekey_passwordcert_fingerprintassert_hostname"None | str | typing.Literal[False]	cert_reqsint | str | Nonec                   | j         t          j        k    rt          S d}d}|st	          |          t
          j        k    rd}|duo3d|                                v o|                                d         dk    }|sO|M|K|I|du rEt          j        t
          j	                  }t          |d          r|                                 nd}|rt          |dd          pd}|j        t
          j        k    rd}|:|8|6|                    d          }|rd                    d	 |D                       }|t          |d
          r|j        du rd}t#          |||t%          |t&                    r|                                n||||	|
|t%          |t*                    r|ndt%          |t&                    r|nd| j        pd          | _        | j        j         | _        dS )z^Meant to support TLS over QUIC meanwhile cpython does not ship with its native implementation.FTNx509_car   load_default_certshostname_checks_common_name
c              3  >   K   | ]}t          j        |          V  d S r}   )sslDER_cert_to_PEM_cert).0certs     rE   	<genexpr>z+HfaceBackend._custom_tls.<locals>.<genexpr>}  s>       - -;?066- - - - - -rt   check_hostnameg     r@)insecurecafilecapathcadatacertfilekeyfilekeypasswordr   cert_use_common_nameverify_hostnamer   idle_timeout)rd   r1   r_   NotImplementedr,   r   	CERT_NONEcert_store_stats
SSLContextPROTOCOL_TLS_CLIENThasattrr   getattrverify_modeget_ca_certsjoinr   r   
isinstancerP   encoder9   _keepalive_delayrl   r   is_verified)rr   r   r   r   r   r   r   r   r   r   r   r   r   r   allow_insecuressl_ctx_have_certsctx_root_certificatess                    rE   _custom_tlszHfaceBackend._custom_tlsC  s^     9&&!!$$ 	""3I">">#-"O"O!N t# >[99;;;>,,..y9A= 	 	# #$"e++.)@AAK{$899 #..0000" 	(%BEJJSe ! &#-77!%K$7L<P(3(@(@(F(F%( #'99 - -CX- - - $ $L
  'K)9:: (.%77"'%2#,,,<&&((($-!5/400OO/3//OO.7%)&
 &
 &
".  $9BBtrt   r_   r   c                *   | j         J | j         j                            d          D ]i}t          |          D ]W\  }}||k    r|                    d          \  }}|r|| j        k    r2	 |t          |          fc c S # t          $ r Y Tw xY wjdS )zFDetermine if remote yield support for an alternative service protocol.Nzalt-svc:)r   msggetlistr+   splitrO   rW   rC   )rr   r   alt_svcprotocolalt_authorityserverrQ   s          rE   __altsvc_probezHfaceBackend.__altsvc_probe  s     ~)))~)11)<< 	 	G+8+A+A  '-s??,22377  f	11!3t99,,,,,,!   D  ts   -B
BBc                   | j         | j        
J d            | j        
J d            | j        /t	          | j        t
          j        t          f          }|rpt	          | j        t
          j                  r| j                                        n| j        j	                                        }||dk    r1t          j        t                    | _        t          j        | _        n>|dk    r1t          j        t                    | _        t          j        | _        nt#          d| d          t          j        | j        vr1t          j        t                    | _        t          j        | _        nt          j        | j        vr1t          j        t                    | _        t          j        | _        nlt'          d          t          j        | j        vr1t          j        t                    | _        t          j        | _        nt          j        | j        vr0t          j        t                    | _        t          j        | _        nt'          d          | j        t          j        k    rt          j        t                    | _        n| j        t          j        k    r~| j        J | j        | j        \  }}| j        }n| j        | j        }}t          j        t2          | j        j        r| j        j        n|t7          |          f|| j        	          | _        t9                      | _        | j        | j        _        | j        j        t@          k    r3tC          | j                  | _"        tG          | j                  | _$        nd
| _"        d
| _$        tK          | d          r5| j&        r.| j&        d         | j        _'        | j&        d         | j        _(        | j        t          j        k    rd }tK          | j        d          r| j        j	        )                    d          | j        _*        	 | j        j	        )                    d
          | j        _+        n# tX          $ r d | j        _+        Y nw xY wd | j        _-        | j        j	        .                                }tK          | j        j	        d          r| j        j	        /                                }| j        j+        s&|r$|d         0                                | j        _+        tc          |          dk    rtd          t	          |d         td                    rotK          t
          d          rZt          j3        |d         4                                          | j        _5        |d         0                                | j        _6        ntK          | j        d          r| j        )                    d          | j        _*        	 | j        )                    d
          | j        _+        n# tX          $ r d | j        _+        Y nw xY wtK          | j        d          r| j        .                                nd }tK          | j        d          rtK          | j        j7        d          r| j        j7        /                                }| j        j+        s&|r$|d         0                                | j        _+        tc          |          dk    rtd          t	          |d         td                    rotK          t
          d          rZt          j3        |d         4                                          | j        _5        |d         0                                | j        _6        |r|d         | j        _.        |d         dk    rt
          j8        j9        | j        _:        n|d         dk    rt
          j8        j;        | j        _:        n\|d         dk    rt
          j8        j<        | j        _:        n4|d         dk    rt
          j8        j=        | j        _:        nd | j        _:        | j        j-        @tK          | j        d          r+| j        >                                d d         | j        _-        | j        | j        t          j        k    r| j        Ct          j        | j        v r0t          j        t                    | _        t          j        | _        n/t          j        t                    | _        t          j        | _        | j        | j        _        | j        j*        rNtK          | d          r>| j&        r7t          j@        t          jB                  | j&        d         z
  | j        _C        t          jE                    | _F        d S | jG        | j        H                    | jG                   	 | I                    t          d
           n# t"          t          t          t          t          f$ r}| j        | j        t          j        k    r(| jO        !| j        | jP        pdf}	|	| jO        v r| jO        |	= d | _        t          j        | jQ        vst          j        | jQ        vr!t          d | j         d!| j         d"          | d }~ww xY wt          jE                    | _F        | jG        | j        H                    | jS                   d | _G        t	          | j        t                    r| j        )                    d          | j        _*        | j        )                    d
          | j        _+        | j        >                                d d         | j        _-        | j        .                                | j        _.        t
          j8        j=        | j        _:        | j        U                    d
          | j        _6        | j        U                    d          | j        _5        | j        j*        r\tK          | d          rN| j        jC        sD| j&        r?t          j@        t          jB                  | j&        d         z
  | j        _C        d S d S d S d S d S )#Nz:_post_conn() must be called when socket is closed or unsetzEprobable attempt to call _post_conn() prior to successful _new_conn()r   zhttp/1.1zUnsupported ALPN 'z<' during handshake. Did you try to reach a non-HTTP server ?zNo compatible protocol are enabled to emit request. You currently are connected using TCP TLS and must have HTTP/1.1 or/and HTTP/2 enabled to pursue.zNo compatible protocol are enabled to emit request. You currently are connected using TCP Unencrypted and must have HTTP/1.1 or/and HTTP/2 enabled to pursue.)remote_addressserver_name
tls_configF_connect_timingsr   r-   sslobjT)binary_formget_verified_chainPEM_cert_to_DER_certgetpeercertcipher_sslobjzTLSv1.0zTLSv1.1zTLSv1.2zTLSv1.3getpeernamer
   tzrI   )receive_firstr   z#The server yielded its support for z[ through the Alt-Svc header while unable to do so. To remediate that issue, either disable z" or reach out to the server admin.)V_tunnel_hostrc   r   rd   r   r   	SSLSocketr   selected_alpn_protocolr   r   newr   r1   r   r   r   r(   r   RuntimeErrorr_   rl   rm   rO   rQ   r   r   rW   r/   r   http_versionr   r   r    rp   r!   rq   r   r   resolution_latencyr   r   certificate_dercertificate_dictrC   destination_addressr   r   get_infolenr   r   public_bytesissuer_certificate_derissuer_certificate_dictr   
TLSVersionTLSv1tls_versionTLSv1_1TLSv1_2TLSv1_3r   r   nowr   utcr   time	monotonic_connected_atro   
settimeout_HfaceBackend__exchange_untilr   TimeoutErrorSocketTimeoutConnectionRefusedErrorConnectionResetErrorr   rn   rL   r'   r	   r   getissuercert)
rr   is_tcp_tls_connalpn_rQ   r   cipher_tuplechainealt_keys
             rE   
_post_connzHfaceBackend._post_conn  s   $>))L *)) y$$S %$$
 9(S]L4QRRO - "$)S];;CDI44666)@@BB  #t||)<)@)O)O$/N		++)<)@)O)O$/O		+ssss   #d.@@@)<)@)O)O$/O		$t/AAA)<)@)O)O$/N		*^   ?$*<<<%8%<]%K%KDN +DII ^4+===%8%<]%K%KDN +DII&b  
 yKN**!4!8!G!Gkn,,1==='3"2GAt!YFF#'9diDF!4!8!  5E$2BB#D			$ !'#9
" 
" 
" ())&*i#9>Z''&3DI&>&>D#&3DI&>&>D##&+D#&+D#4+,, 	J1F 	J040Ea0HDN-151Fq1IDN. 9&&8<Lty(++ BU151A1M1M $ 2N 2 2.;6:i6F6R6R$) 7S 7 7DN33 " ; ; ;6:DN333; 6:2#y/6688 49+-ABB U I,??AAE  >: Nu N:?(:K:K:M:M7 E

Q'3&uQx== 4#C)?@@ 4
  4U1X5J5J5L5LMM = BGqARARATAT>M22  U151F1FSW1F1X1X.;6:i6K6K$) 7L 7 7DN33 " ; ; ;6:DN333; +2$)X*F*FPDI$$&&&D 
 49i00 UWI%';6 6 U !I-@@BBE  >: Nu N:?(:K:K:M:M7 E

Q'3&uQx== 4#C)?@@ 4
  4U1X5J5J5L5LMM = BGqARARATAT> 6(4Q%?i//141EDN..!!_	11141GDN..!!_	11141GDN..!!_	11141GDN..15DN.~19g	=? ?9 6:Y5J5J5L5LRaR5P2 >!TY+/%A%A~%+/T=O*O*O!4!8!G!G'N		!4!8!G!G'O	*.)DN' .D"455 ) LHL111D4I"4MM 4 "&!1!1DF 0<I  !FGGG$	!!"# "    
 " 
 	 	 	 #/ I//3?#y$*<*CDG$"=== 7@ "&
  O4+<<<"~T->>>,qdi q qCG9q q q   ?	B "^--0<I  ...  	-
 dn&:;; 	-1^-G-G  .H . .DN* /3n.H.H! /I / /DN+ 261F1F1H1H!1LDN.$(N$9$9$;$;DN!),)?DN&59^5Q5Q! 6R 6 6DN2 59N4P4P  5Q 5 5DN1
 N*	011	 N8	 %		 ---0Eb0II N000	 	 	 	 	 	 	 	s=    *Q+ +RR=%X# #X<;X< g= =#j8 Bj33j8httpheaderstyping.Mapping[str, str] | Noner   c                    | j         rt          d          t          j        | j        vr$| j                            t          j                   || _        || _        |r	|| _        d S i | _        d S )Nz.Can't set up tunnel for established connection)	r   r   r1   r_   r   r^   r   _tunnel_port_tunnel_headers)rr   rO   rQ   r"  r   s        rE   
set_tunnelzHfaceBackend.set_tunnel  s     9 	@  
 >!333"";>222(,(, 	&#*D   #%D   rt   c                   | j         J | j        J | j        J | j        J | j        t
          j        k    rt          d          | j                                         | _	        d| j         d| j         
                    d          fdg}| j                                        D ]S\  }}|                    |                                
                                |
                    d          f           T| j                             | j	        |d           |                     t"          dt"          fd	          }d }|D ]M}t%          |t"                    r6|j        D ].\  }}|d
k    r#t)          |                                          } n/N|d uod|cxk    odk     nc }	|	sC|                                  |r|t.          v rt.          |         nd}
t1          d| d|
           d | _        d | _         d | _        d S )Nz7Unable to establish a tunnel using other than HTTP/1.1.
   :authorityr   ascii)   :method   CONNECT
iso-8859-1TF)r   event_type_collectablerespect_end_stream_signal   :status   ,  UnknownzTunnel connection failed:  )rc   r   r   r%  rd   r1   r   r   get_available_stream_idre   r   r&  itemsappendlowersubmit_headersr  r   r   r"  rW   decoder   r   OSError_protocol_factory)rr   req_contextheadervalueeventsstatusevent
raw_header	raw_valuetunnel_acceptedmessages              rE   _tunnelzHfaceBackend._tunnel  st   ~)))y$$$ ,,, ,,,9''%M   .@@BB $::t'8::AA'JJ %
 "17799 	V 	VMFE 5 5 7 7l9S9STUUUU%%O	
 	
 	
 &&$3#5&+ ' 
 
 " 	 	E%11 -2]  )J	!Z//!$Y%5%5%7%7!8!8 0 !'d 2 Lv8K8K8K8K8K8K8K8K 	KJJLLL%+R)0C0C	&!!  IvIIIIJJJ 	!%rt   Fexpect_framec                F   | j         | j        dS | j                                         }| j                             |sdnd           	 | j        rt          | j         | j                  }n| j                             | j                  }nQ# t          t          t          j        f$ r Y | j                             |           dS t          t          f$ r d}Y nw xY w| j                             |           n# | j                             |           w xY w|s| j                                         dS 	 t          |t                     r |D ]}| j                            |           n| j                            |           n## | j                                        $ r Y dS w xY w	 | j                                        }|sn.	 | j                             |           n# t          $ r Y dS w xY wJt+          j                    | _        | j                                        S )a#  This method should be called by a thread using TrafficPolice when it is idle.
        Multiplexed protocols can receive incoming data unsolicited. Like when using QUIC
        or when reaching a WebSocket.
        This method return True if there is any event ready to unpack for the connection.
        Some server implementation may be aggressive toward "idle" session
        this is especially true when using QUIC.
        For example, google/quiche send regular unsolicited data and expect regular ACKs, otherwise will
        deduct that network conn is dead.
        see: https://github.com/google/quiche/commit/c4bb0723f0a03e135bc9328b59a39382761f3de6
        and: https://github.com/google/quiche/blob/92b45f743288ea2f43ae8cdc4a783ef252e41d93/quiche/quic/core/quic_connection.cc#L6322
        NFgMbP?g?rt   )r   rc   
gettimeoutr  rp   r"   rV   recvr;  r  r   r	   ConnectionAbortedErrorr  connection_lostr   listbytes_received
exceptionsbytes_to_sendsendallr  r  _last_used_athas_pending_event)rr   rH  bck_timeout	peek_datagro_segmentdata_outs         rE   peek_and_reactzHfaceBackend.peek_and_react7  s`    9 65i**,,	,?UUC@@@
	.& ;)$)T^DD		 INN4>::	v~6 	 	 	 I  ----- '(<= 	 	 	III	 I  ----DI  ---- 	N**,,,5	)T** 9#, ? ?KN11+>>>>? --i888~((** 	 	 	55			~3355H 	!!(++++   uu		 "^--~//111s\   	AB 
C7 C'C7 CC7 CC7 7D4AF F$#F$G   
G.-G.T)r   r.  r/  maximal_data_in_readdata_in_len_from	stream_id
event_type%type[Event] | tuple[type[Event], ...]r   r.  ,type[Event] | tuple[type[Event], ...] | Noner/  rZ  r[  $typing.Callable[[Event], int] | Noner\  list[Event]c          	        | j         | j        J ||dk    s|dk    sd}d}g }	g }
|dk    r|	S |r|dk     rd}d}d}	 d}| j                            |          sl|du r| j        rg }	 | j                                        }|sn|                    |           2t          |          dk    rt          | j         |           n[|r | j                             |d                    n8	 | j                                        }|sn| j                             |           7	 | j	        rt          | j         | j                  }n| j                             | j                  }n# t          t          f$ rJ}t          |t                    r)|t           u st          |t"                    rt           |v r|d}Y d}~ndd}~wt$          $ rT}| j         j        t(          j        u r6|t           u st          |t"                    rt           |v rt                      | d}~ww xY wd}|s|	s| j        et/          | j        d	          rP	 | j                                         n# | j                                        $ r}t5          |          |d}~ww xY w| j                                         nZt          |t8                    r|D ]}||t          |          z  }	 | j                            |           2# | j                                        $ rQ}t/          |d
          r,t/          |d          rt=          |j        |j                   |t5          |          |d}~ww xY wn||t          |          z  }	 | j                            |           np# | j                                        $ rQ}t/          |d
          r,t/          |d          rt=          |j        |j                   |t5          |          |d}~ww xY w|du r| j        rg }	 | j                                        }|sn|                    |           2t          |          dk    rt          | j         |           n[|r | j                             |d                    n8	 | j                                        }|sn| j                             |           7| j        !                    |          D ]#}t/          |d          }|s<t          |tD                    r&|j#        dk    rm|k|tH          u st          |t"                    rMtH          |v rDd| _        | %                                 |	                    tI          |dd                     |	c S |du rw|dk    rq| j        jt          |t"                    r	tL          |v s	|tL          u rCtO          d |	D                       r*d| _        | %                                 t5          d          |j#        dk    r$|j(        rd|j(        v rtS          |j(                  |j#        dk    rK| j*        tV          j,        k    r6|j(        r d|j(        v rt[          d|j(                   t[          d          	 |j(        rzd|j(        v rq|j(        .                    dd          /                    d          }d t#          |0                    d                    D             \  }}t=          |||z
            n# tb          td          f$ r Y nw xY wt5          |j(                  |rt          |tf                    r| j*        tV          j4        k    r|j#        dk    s | j*        tV          j,        k    r5|j#        dk    r*tV          j5        | j6        vrto          d| j*                   t5          d |j8         d!ts          |j#                   d"          |s|	                    |           n]t          ||          r8|	                    |           | 	 | ||          z  }n&# tt          $ r Y nw xY wn|
                    |           |duo||k    }|rt          ||          s|r=|du r$|r"|r |j;        du r|
r | j        j<        |
  |	c S |
r | j        j<        |
  |	c S |r"|j;        du r|du r|
r | j        j<        |
  |	c S |r-|j;        du r$|"| ||j8        k    r|
r | j        j<        |
  |	c S %)#zThis method simplify socket exchange in/out based on what the protocol state machine orders.
        Can be used for the initial handshake for instance.Nr   rI   FTr\  r-   rt   eof_receivedexpected_lengthactual_length)partialexpectedr\  
end_streamc              3  D   K   | ]}t          |t                    d u V  dS )FN)r   r   r   r  s     rE   r   z0HfaceBackend.__exchange_until.<locals>.<genexpr>H  s1      XXA
1o > >% GXXXXXXrt   z-Remote end closed connection without responsei  r>  i*  FingerprintzTLS over QUIC did not succeed. zfTLS over QUIC did not succeed. Chain certificate verification failed or client cert validation failed.z%without sending complete message bodyz=peer closed connection without sending complete message body  z()c              3     K   | ]B}t          d                     d |D                                                                 V  CdS )rn  c              3  B   K   | ]}|                                 |V  d S r}   )isdigit)r   cs     rE   r   z:HfaceBackend.__exchange_until.<locals>.<genexpr>.<genexpr>q  s/      +H+H!AIIKK+HA+H+H+H+H+H+Hrt   N)rW   r   strip)r   r  s     rE   r   z0HfaceBackend.__exchange_until.<locals>.<genexpr>p  se       2 2$% !$BGG+H+Hq+H+H+H$H$H$N$N$P$P Q Q2 2 2 2 2 2rt   z,    i  z8The remote server is unable to serve this resource over zStream z# was reset by remote peer. Reason: .)=r   rc   rT  rq   rQ  r7  r  r#   rR  rp   r"   rV   rK  rL  r  r   r   tupler;  r   r   r   r   r   rd  rP  r(   rM  rN  rO  r%   rf  re  r@  r   
error_coder   r   r   allrF  r&   rd   r1   r_   r*   replacers  r   rC   
IndexErrorr   r   r   rL   r'   r\  hexAttributeErrorrj  reshelve)rr   r]  r   r.  r/  rZ  r[  r\  data_in_lenr@  reshelve_eventsreach_sockettbsrX  data_inr  udp_gro_segmentrB  stream_related_eventr   receivedrh  target_cap_reacheds                          rE   __exchange_untilzHfaceBackend.__exchange_untils  s    y$)C)C)C+(A--1E1K1K'+$
  ')1$$M 	$$81$<$<(-%#' #j	"!&L>33i3HH {8 E)). 8 1'+~'C'C'E'EH#+ & %JJx000	1
 s88a<<,TY<<<<  6 I--c!f5558'+~'C'C'E'EH#+ & % I--h7778. A"/	4>"J"J"&).."@"@.0DE 	" 	" 	"!!%9::  "&888&z599 9 !3j @ @  !GGGGGG    y~):::"&888&z599 9 !3j @ @ 344!;  $ 1:  
9$."<'C C"<: N779999#~88:: : : : #0"2"29:
 668888!'400 :/6 > >O/7 +s?/C/C C
> $ = =o N N N N#'>#<#<#>#> > > >#*1.?#@#@ !-W$%F" F" !- +901121B+& +& +& ,-%- '4A&6&6A =>>  ,3'3w<<7K: N99'BBBB#~88:: 	: 	: 	:  'q*;<< ) !?B B ) '5,-OaFW'" '" '"'(!) #0"2"29	: !D((. 8 1'+~'C'C'E'EH#+ & %JJx000	1
 s88a<<,TY<<<<  6 I--c!f5558'+~'C'C'E'EH#+ & % I--h7778 ...CC k" k"-4UK-H-H$+ q
5BV0W0W q
 (A--%1&,66 *:u = = 7 %1J$>$>
 ! 
 

( ) #+/      & %,,#sNN N6 !+:u = = 7 %4z$A$A *o = =XXQWXXXXX !> *.

+K  
 (C//!M 0$55+EM::: )S00TY+.5P5P = ]em-K-K"* Q%- Q Q# #  #+!D# # !M G5= X X"'-"7"7 _ "# # $eDkk  
2 2).syy)?)?2 2 2.Hh
 #1(0)1H)<# # #  '
3    (666) j@S.T.T  	[^338HC8O8O	[^338HF8R8R&?$2CCC"4 f[_[d f f# #  (n%/nnVYZ_ZjVkVknnn   . 6MM%((((!%)?@@ 	6e,,,+7% +/?/?/F/F F#1 % % % $% 8 (..u555 )4 <#';; #
  "":eZ#@#@ ""EW "" +e335 40 4 !+t33. J 7 7 I I#)MMM & B//AA!MMM("(D001T99& B//AA!MMM(	"(D00,4.:!U_44& B//AA!MMMU	j	"s   !AE# #H4A F99HAHH I J7JJK33M AMM 9N P0AO<<PB\

\\#`22
`?>`?methodurl	skip_hostskip_accept_encodingc                   g | _         d| _        d| _        d| _        d| _        d| _        t          j        t          j	                  | _
        | j        | j        | j        }}n| j        | j        }}d|                    d          fd| j                            d          fd|                    d          fg| _         |s_|                    d          }| j                             d	|| j        k    s||n|d
|                                 z   f           d| _        |s| j                             d           dS dS )zNInternally fhace translate this into what putrequest does. e.g. initial trame.NFr   r+  r*  s   :schemes   :pathidnar)  r   T)s   accept-encodings   identity)rf   rg   rh   rj   ri   rk   r   r  r   r  _start_last_requestr   r%  rO   rQ   r   r   r7  default_port)rr   r  r  r  r  rO   rQ   r   s           rE   
putrequestzHfaceBackend.putrequest  sv    &*#'+$#' #( "'#+<8<#@#@#@ (*D,=$DDDI$D w//0""7++ szz'**+
  
	,#{{622IN!!!t000DL I"ZZZ%6%6%8%88	   (,D$# 	N!!    	 	rt   r>  valuesc                   |                                 }t          |t                    r|                    d          n|}| j        t
          j        k    }|s|dv rd S | j        I|dk    rC	 t          |d                   | _        n# t          $ r t          d|d          d          w xY w| j        |dk    rt          |d         t                    r!|d                             d          | _        nVt          |d         t                    r|d         | _        n-t          |d                                       d	          | _        d S |D ]}t          |t                    r|                    d	          }n:t          |t                    r|}n"t          |                              d	          }|                    d
          ry|dk    rd| _        d }| j        D ](\  }}	|                    d
          s n||k    r||	f} n)|| j                            |           | j                            d||f           | j                            ||f           d S )Nr*  >      upgrade
   connection
   keep-alive   transfer-encodings   content-lengthr   z#Invalid content-length set. Given 'z' when only digits are allowed.s   hostr  r-     :s	   :protocolT)r8  r   rP   r   rd   r1   r   rg   rW   rC   r(   rj   bytes
startswithrk   rf   removeinsertr7  )
rr   r>  r  encoded_headersupport_te_chunkedr?  encoded_valueitem_to_remove_k_vs
             rE   	putheaderzHfaceBackend.putheader  s    3=fc3J3JVw///PV $(9#? " 	 "   &.>EV3V3V.1&)nn++   #d&)ddd   %-.G2K2K&)S)) O+1!9+;+;F+C+C((F1Iu-- O+1!9((+.vay>>+@+@+N+N(F $	 $	E%%% @ %\ : :E5)) @ % #E

 1 1, ? ?((.. !\11.2D+!%"n  FB==.. ^++*,b , "-N)).999%%&%    %%&%   ?$	 $	s   ,B $B+)encode_chunkedexpect_body_afterwardmessage_bodybytes | Noner  r  ResponsePromise | Nonec               &   | j         |                                  | j        |                                  | j         | j        J | j                                        | _        |du o| j        du }| j        wd }| j        D ](\  }}|dk    r||f} n|	                    d          s n)|| j        
                    |           | j                            dd| j        f           d| _        | j        du rt          d          	 | j                            | j        | j        |           n4# | j                                        $ r}t          |          |d }~ww xY w	 | j        rg }		 | j                                        }
|
sn|	                    |
           2t'          |	          dk    rt)          | j         |	           n[|	r | j                             |	d	                    n8	 | j                                        }
|
sn| j                             |
           7t-          j                    | _        nT# t2          $ rG}t5          | | j        | j                  }|| j        |j        <   || j        |j        <   ||_        |d }~ww xY w|du rz| j         r8| j!        r1tE          j#        tH          j%        
          | j         z
  | j!        _&        t5          | | j        | j                  }|| j        |j        <   || j        |j        <   |S d S )NFr)  r     T)zOurllib3.future do not support emitting HTTP requests without the `Host` header zKIt was only permitted in HTTP/1.0 and prior. This client support HTTP/1.1+.ri  r-   r   r   )'r   connectrc   r   r5  re   rk   rj   rf   r  r  r  ri   r(   r9  rP  rq   rQ  r7  r  r#   rR  r  r  rS  BrokenPipeErrorr4   	_promisesuid_promises_per_streamr\  promiser  r   r   r  r   r  request_sent_latency)rr   r  r  r  should_end_streamexisting_authoritycursor_headercursor_valuer  r  bufrps               rE   
endheaderszHfaceBackend.endheadersD  s    9LLNNN >!OOy$)C)C)C .@@BB "U*Ot/F%/O 	
 #/!%/3~  +| M11*7)F&E$//55 E "-%%&8999N!!!mT5M%NOOO'+D$#u,,  	*N)), *    
 ~((** 	* 	* 	*"")	*	2& +$.6688C JJsOOO	$
 s88a<<$TY4444 .I%%c!f---+.6688C I%%c***	+ "&!1!1D  	 	 	 tGGB%'DN26"68D%bl3AIG	 !E))' DN LHL111D4LL 3 !tGGB%'DN26"68D%bl3Its2   	'D1 1E"EE"&C H? ?
J	AJJ_HfaceBackend__bufr  _HfaceBackend__stream_id_HfaceBackend__close_streamc                <   | j         J | j        J | j                             |t          |                    du r| j        rt          | j        | j                  }n| j                            | j                  }t          |t                    r |D ]}| j         
                    |           n| j         
                    |           	 | j                                         }|sn| j                            |           7| j                             |t          |                    du | j                             |||           	 | j                                         }|sn| j                            |           7t          j                    | _        d S )NTri  )rc   r   should_wait_remote_flow_controlr  rp   r"   rV   rK  r   rN  rO  rQ  rR  submit_datar  r  rS  )rr   r  r  r  r  rW  rX  s          rE   
__write_stzHfaceBackend.__write_st  s    ~)))y$$$ N::;E

SS  & 9'	4>BB)..88'4(( 7#* ? ?KN11+>>>>? --g666,>7799 	!!(+++, N::;E

SS , 	""% 	# 	
 	
 	
	(~3355H Ih'''	( "^--rt   c                   | j         J | j        J | j                             |           	 | j                                         }|sn| j                            |           7	 | j        |= n# t          $ r Y nw xY w| j                                         r|                                  t          j
                    | _        dS )zKill a stream properly.Nrc  )rc   r   submit_stream_resetrQ  rR  _pending_responsesKeyErrorrw   r   r  r  rS  )rr   r  rX  s      rE   
__abort_stzHfaceBackend.__abort_st  s    ~)))y$$$**[*AAA	(~3355H Ih'''	(	'44 	 	 	D	 >%%'' 	JJLLL!^--s   'A0 0
A=<A=_HfaceBackend__amt!_HfaceBackend__respect_end_signal_HfaceBackend__dummy_operation)tuple[bytes, bool, HTTPHeaderDict | None]c           	        |ri	 | j         |= n# t          $ r Y nw xY w| j        F| j                                        r-| j                                        r|                                  dS d}|                     t          dt          t          f|d ||          }t          j
                    | _        |r|d         j        rd}	 | j         |= n# t          $ r Y nw xY w| j        b| j                                        r.| j                                        r|                                  n| j        r|                                  d}|rd}t          |d         t                    rd}n0t          |          dk    rt          |d	         t                    rd	}|t!                      }||         j        D ]N\  }	}
|	d
         dk    r|                    |	                    d          |
                    d                     O|                    |           |sdd|fS t          |          dk    rd                    d |D                       n|d
         j        ||fS )zKAllows us to defer the body loading after constructing the response object.N)rt   TNFTc                *    t          | j                  S r}   )r  data)xs    rE   <lambda>z(HfaceBackend.__read_st.<locals>.<lambda>  s    s16{{ rt   )r   r.  rZ  r[  r\  r/  rI   r
   r   :   r*  r-  rt   r-   c              3  $   K   | ]}|j         V  d S r}   )r  rl  s     rE   r   z)HfaceBackend.__read_st.<locals>.<genexpr>B  s$      ,,QV,,,,,,rt   )r  r  rc   is_idlerw   r   r  r   r   r  r  rS  rj  r   r   r  r   r"  r^   r:  popr   r  )rr   r  r  r  r  eotr@  trailersidxrC  rD  s              rE   	__read_stzHfaceBackend.__read_st  s     
	#+K88    ~)>))++ !0J0J0L0L !JJLLL"?7;7L7L$0/#B!&22!&: 8M 8
 8
 "^-- 	$fRj+ 	$C+K88    ~)>))++ $0J0J0L0L $JJLLLL\ $MMOOO 	/C&*o66 V!!j_&M&M! )++-3C[-@  )J	!!},,  &--g66	8H8H8V8V    

3 /h.. 14FaCHH,,V,,,,,,VAY^
 	
s    
C 
CCr  early_response_callbackr  r  0typing.Callable[[LowLevelResponse], None] | Noner2   c               L   | j         | j        | j        st                      | j        s| j        }n|r|j        nd }|                     t          t          fdt          t          fd|          
                                }t          j                    | _        t                      }d }|j        D ]e\  }}|"|d         dk    r|dk    rt!          |          })|                    |                    d          |                    d                     f|t'          d	          t)          |t                    o|d
k    }	|a	 |	r| j        |j                 }n| j        
                    |j                  }n:# t,          $ r}
t'          d|j         d          |
d }
~
ww xY w|	s| j        |j        = d}|j        D ]\  }}|dk    r|} n	 t0          |         }n# t,          $ r d}Y nw xY w|	rp|Qt3          |                    d          || j        ||d | j        | j        |j        	  	        }||_         ||           t<                              | ||          S |j         du }|d
k    s|dk    r1d|cxk    rdk     r$n n!tC          |j        | j"        | j#                  }nd }t3          |                    d          || j        |||du r	|| j"        nd | j        | j        |j        | j        dk    r| j         nd ||du r| j$        nd           | _%        | j%        |_&        || j%        _        | j        |j'        = |rJ| j        (                                r| )                                 n0| j*        r| +                                 n| j%        | j,        |j        <   | j%        S )NTF)r   r.  r/  r\  r   r  r0  r*  r-  z@Got an HTTP response without a status code. This is a violation.e   zResponse received (stream: z) but no promise in-flightrt   r+  r3  )bodyr   rQ   r\  r  r,  r1  r2     )r   rQ   r\  r   dsastream_abort)-r   rc   r  r)   r   re   r\  r  r   r   r  r  r  rS  r   r"  rW   r^   r:  r(   r   r  r  request_headersr   r2   	_http_vsnrO   rQ   from_promiserH   getresponserj  r0   _HfaceBackend__read_st_HfaceBackend__write_st_HfaceBackend__abort_str   responser  rw   r   r  r   r  )rr   r  r  r\  
head_eventr"  rA  rC  rD  is_early_responser  	http_verbreasonearly_responser  r  s                   rE   r  zHfaceBackend.getresponseG  s    I~%> & #$$$" 	?II-4>))$I >B=R=R$ $$ ', >S >
 >
 #%% 	  "^-- ""!%/%7 	X 	X!J	~*Q-4"7"7++ ^^FJ--g66	8H8H8V8VWWWW >R   z#788JVs] 	 ?$ R"7
8LMGG"7;;J<PQQG   #b*2Fbbb 
 % A-g.?@	%,%< 	 	!J	Z''%	 (	#F+FF 	 	 	FFF	  	&2!1$$W--N"i%/
" 
" 
" /6+''777++g?V ,    #t+S==Y*44#:M:M:M:M#:M:M:M:M:M-?!. .CC C+;W%%N!Ulls{DNNi'~## ,/5LLd,
 ,
 ,
   >&-# N7;' 	H~))++  

  9=D#G$56~s*   4E; ;
F#FF#G G,+G,)r  r  bytes | bytearrayr  c               .   | j         | j        | j        t          d          | j        | j        | j        | _        	 | j                            | j        t          |                    du r| j        rt          | j         | j
                  }n| j                             | j
                  }t          |t                    s| j                            |           n|D ]}| j                            |           | j                            | j        t           f          r| j        r8| j        r1t'          j        t*          j                  | j        z
  | j        _        t1          | | j        | j                  }|| j        |j        <   || j        |j        <   t=          |          	 | j                                        }|sn| j                              |           7| j                            | j        t          |                    du | j        r| xj        t          |          z  c_        | j        !                    | j        ||           tD          rtG          j$        d| |           d}	 | j%        rg }	 | j                                        }|sn|&                    |           2t          |          d	k    rtO          | j         |           n[|r | j                              |d
                    n8	 | j                                        }|sn| j                              |           7n# tP          $ r}	|	}Y d}	~	nd}	~	ww xY w|s|r| j        r8| j        r1t'          j        t*          j                  | j        z
  | j        _        t1          | | j        | j                  }|| j        |j        <   || j        |j        <   |r	||_)        ||S n4# | j        *                                $ r}	tW          |	          |	d}	~	ww xY wdS )z4We might be receiving a chunk constructed downstreamNz,Trying to send data from a closed connectionT)r\  
excl_eventr   )r  ri  zhttp.client.sendr-   r   ),r   re   rc   r   rh   rg   r  r  rp   r"   rV   rK  r   rN  rO  rT  r   r  r   r   r  r   r  r  r4   rf   r  r  r  r\  r$   rQ  rR  r  _HAS_SYS_AUDITsysr6   rq   r7  r#   r  r  rP  r(   )
rr   r  r  r  rW  r  rX  remote_pipe_shutdownr  r  s
             rE   sendzHfaceBackend.send  s    9 74>;Q >  
 (0+7+/+FD(b	>>OSYY   
 * =+DIt~FFGG"innT^<<G!'400 CN11'::::'. C C55kBBBB >33"o;O:Q 4   4 / DN $LHL999D<TT ; )tOOB-/DN26*>@D-bl;'33330#~;;==H# I%%h///0A >>OSYY   P + :,,D		9,,N&& '     :	,dD999;? )* 4C-#'>#?#?#A#A' "!

8,,,	-
 3xx!||(C8888 2	))#a&1114#'>#?#?#A#A' "!	))(3334 # ) ) )'($$$$$$)  * +   5558PP N7 %T4?DNKK)+rv&:<)",7' /35(0..	 ~((** 	 	 	 	
 tsE    H<O! =C L> =O! >
MM
O! MBO! !P=PPc                   | j         | j        dS | j                                        rdS 	 | j                                         n/# t          $ r Y dS | j                                        $ r Y dS w xY w	 | j                                        }|sn9	 | j                             |           n# t          t          j
        f$ r Y nw xY wUt          j                    | _        dS )z8Send a ping frame if possible. Otherwise, fail silently.N)r   rc   rw   pingr   rP  rQ  rR  r;  r   r*   r  r  rS  )rr   
ping_frames     rE   r  zHfaceBackend.pingX  s    9 6F>%%'' 	F	N!!!!" 	 	 	FF~((** 	 	 	FF		5577J 	!!*----    		 "^--s)   A 
A3A32A3B/ /CCc                   | j         r
| j        	 | j                                         	 | j                                        }|sn9	 | j                             |           n# t
          t          j        f$ r Y nw xY wUn4# | j                                        $ r}t          |          |d }~ww xY w	 | j         
                    d           n# t
          t          f$ r Y nw xY w	 | j                                          n# t
          $ r Y nw xY wd | _        d | _        i | _        i | _        i | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        t1          j                    | _        d| _        d| _        d S )NTr   F)r   rc   submit_closerQ  rR  r;  r   SSLEOFErrorrP  r(   shutdownr|  r   re   r  r  r  rl   r   rg   rh   r  _cached_http_vsnr  r  r  rS  rp   rq   )rr   goodbye_framer  s      rE   r   zHfaceBackend.closew  s   9 	~)"N//111

"(,(D(D(F(F, "!" I--m<<<<#O  " " " "E	"
"	 ~0022 2 2 2'**12 	""1%%%%^,   	!!!!    $&!"$%)"&*#'+$#'  $!!^--"'"'sM   B A# #A<;A<B2B--B26C C%$C%)D 
DD)rO   rP   rQ   rR   r	   rS   rT   rU   rV   rW   rK   rX   rL   rY   rM   rZ   rN   r[   r8   r9   )r8   rW   )r8   r   )r8   r   )NNNNNNNNNNNN)r   r   r   r   r   r   r   r   r   rR   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r8   r9   )r_   )r   rP   r8   rU   )NNr!  )
rO   rP   rQ   rR   r"  r#  r   rP   r8   r   )F)rH  r9   r8   r9   )r]  r^  r   r9   r.  r_  r/  r9   rZ  rR   r[  r`  r\  rR   r8   ra  )FF)
r  rP   r  rP   r  r9   r  r9   r8   r   )r>  rP   r  rP   r8   r   r}   )r  r  r  r9   r  r9   r8   r  )r  r  r  rW   r  r9   r8   r   )r  rW   r8   r   )TF)
r  rR   r  rR   r  r9   r  r9   r8   r  )r  r  r  r  r8   r2   )r  r  r  r9   r8   r  )&__name__
__module____qualname__r1   r   r   r_   supported_svnr   r.   default_socket_optionsr   ra   propertyry   r{   r   r   r   r   r   r   r   r'  rG  rY  r  r  r  r  r  r  r  r  r  r  r   __classcell__)rs   s   @rE   rH   rH   b   s        _knknEM
  &(15*9. 304@D.E9. 9. 9. 9. 9. 9. 9. 9.v    X / / / X/
 I I I XI 	W 	W 	W X	W, , , ,\S S S Sn .2#"&+/*.*.(,'++/'+>B&*^ ^ ^ ^ ^@    0c c c cP	  37& & & & &2<& <& <& <&|:2 :2 :2 :2 :2@ $OS*.+/AE $N" N" N" N" N" N"h
  %*1 1 1 1 1fL L L L` &*a  %&+a a a a a aH FK+. +. +. +. +.Z. . . .< &*"'W
 W
 W
 W
 W
x +/U U U U U Uv 	x x x x x xt. . . .>-( -( -( -( -( -( -( -(rt   rH   r  )K
__future__r   r   r  r  typingr   r   	functoolsr   r   r   r	   r  r   util.ssltransportr   rA   r|  _sslr   _collectionsr   	_constantr   r   r   r   contrib.hfacer   r   r   r   r   r   r   contrib.hface.eventsr   r   r   r   r   r   r   contrib.ssa._gror    r!   r"   r#   rP  r$   r%   r&   r'   r(   r)   r*   r?   r+   r,   _baser.   r/   r0   r1   r2   r3   r4   TYPE_CHECKING_typingr5   r   r  rF   rH    rt   rE   <module>r     s   " " " " " "  



   ' ' ' ' ' ' ' '       * * * * * * * * + + + + + +JJJ0000000^$   
CLLL
       ^$   KKK * ) ) ) ) )                                                                          4 3 3 3 3 3 3 3                  
 /......g&& 1   B( B( B( B( B(; B( B( B( B( B(s!   
? AAA 	A$#A$