
    2i                     b   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddlmZ ddlmZ ddlmZ  G d dej2                        Z ej6                  dg d	      Z ej6                  d
g d      Z ej<                         j>                  Z e dk(  rdZ!ndZ!dejD                  dejF                  ejH                  e%df      fdZ&dejN                  ejD                     dejF                  e%   dejF                  e(   de%de%f
dZ)d Z*dddZ+d Z,dejN                  ejD                     fdZ-d Z.d Z/ G d  d!e j`                        Z1dd"d#Z2d$ Z3 G d% d&e4      Z5d' Z6 G d( d)e%ejn                        Z8d*e9fd+Z:d,e9fd-Z;d. Z<e8jz                  e<e8j|                   e:d      e8j~                   e:d/      e8j                   e:d/      e8j                   e;d      e8j                   e;d/      iZCd0e8fd1ZDd2 ZEd3efd4ZFd5 ZGd6 ZHd7 ZIy)8    N   )compat)
exceptions)protocolc                   4    e Zd ZdZdZdZdZdZdZe	d        Z
y)	SSLModer   r               c                 V    t        ||       r|S t        | |j                  dd            S )N-_)
isinstancegetattrreplace)clssslmodes     ]/var/www/html/marco-python-backend/venv/lib/python3.12/site-packages/asyncpg/connect_utils.pyparsezSSLMode.parse)   s)    gs#NsGOOC566    N)__name__
__module____qualname__disableallowpreferrequire	verify_caverify_fullclassmethodr    r   r   r   r   !   s2    GEFGIK7 7r   r   ConnectionParametersuserpassworddatabasesslr   
direct_tlsserver_settingstarget_session_attrsConnectionConfigurationcommand_timeoutstatement_cache_sizemax_cached_statement_lifetimemax_cacheable_statement_sizeWindowszpgpass.confz.pgpasspassfilereturn.c                    g }	 | j                         sg S | j                         s&t        j                  dj	                  |              g S t
        dk7  rb| j                         j                  t        j                  t        j                  z  z  r&t        j                  dj	                  |              g S | j                  d      5 }|D ]o  }|j                         }|r|j                  d      r'|j                  dd      }|j                  t        d t!        j"                  d	|d
      D                     q 	 d d d        |S # 1 sw Y   |S xY w# t$        $ r Y |S w xY w)Nz&password file {!r} is not a plain filer2   zWpassword file {!r} has group or world access; permissions should be u=rw (0600) or lessrt#\\
c              3   @   K   | ]  }|j                  d d        yw)r9   r8   N)r   ).0ps     r   	<genexpr>z&_read_password_file.<locals>.<genexpr>r   s#      % IIdE*%s   z(?<!\\):r   )maxsplit)existsis_filewarningswarnformat_systemstatst_modeS_IRWXGS_IRWXOopenstrip
startswithr   appendtupleresplitIOError)r3   passtabflines       r   _read_password_filerT   Q   sI    G! I!MM8??IK Ii}}&&$,,*EF@@F A"#
 	]]4  	A zz|ts3 ||E40u %XXk4!D%   	  N!	  N  NsB   E 5E A*E 7E A5E>E EE E 	E"!E"hostsportsr'   r%   c                     t        |       }|syt        ||      D ]_  \  }}|j                  d      rd}|D ]B  \  }}	}
}}|dk7  r||k7  r|	dk7  r|	t        |      k7  r(|
dk7  r|
|k7  r3|dk7  r||k7  r>|c c S  a y)zParse the pgpass file and return the matching password.

    :return:
        Password string, if found, ``None`` otherwise.
    N/	localhost*)rT   ziprK   str)r3   rU   rV   r'   r%   rQ   hostportphostpport	pdatabasepuser	ppasswords                r   _read_password_from_pgpassrd   |   s     "(+G%' 
d??3D9@ 	5E5)UI||T 2CI$9| 	$ r   c                    t        |t              rPt        |      t        |       k7  r7t        j                  dj                  t        |      t        |                   |S t        t        |             D cg c]  }| }}|S c c}w )Nz+could not match {} port numbers to {} hosts)r   listlenr   ClientConfigurationErrorrC   range)rU   r^   r   s      r   _validate_port_specrj      s{    $ t9E
"55=DDIs5z+, , K $CJ/000K 1s   7	BFunquotec                   d| v r| j                  d      }n| g}g }g }|sht        j                  j                  d      }|r8d|v r(|j                  d      D cg c]  }t	        |       }}nt	        |      }nd}t        ||      }nt        ||      }t        |      D ]  \  }	}
|
d   dk(  r|
}d}n||
d   dk(  r_t        j                  d|
      }|r#|j                  d	      }|j                  d
      }n9t        j                  dj                  |
            |
j                  d      \  }}}|rt        j                  j!                  |      }|j#                  |       |r|r=|rt        j                  j!                  |      }|j#                  t	        |             |j#                  |	           |s|}||fS c c}w )N,PGPORT8  r   rX    [z(?:\[([^\]]+)\])(?::([0-9]+))?r   r	   z0invalid IPv6 address in the connection URI: {!r}:)rO   osenvirongetintrj   	enumeraterN   matchgroupr   rh   rC   	partitionurllibr   rl   rL   )hostlistr^   rl   	hostspecsrU   hostlist_portsportspecr<   default_portihostspecaddrhostspec_portmr   s                  r   _parse_hostlistr      s   
hNN3'	J	EN::>>(+h08s0CD1ADD"8}L*9lC #9d3 + 78A;#DMa[C:HEAwwqz !
 99FMM   &.%7%7%<"D!]<<''-DT$*LL$8$8$GM%%c-&89%%l1o6?7B $;_  Es   Gc                     | j                  d      rt        j                  d|        	 t        j                  | j                  dd         S # t        $ r t        j                  d|        w xY w)NSSLzUnsupported TLS version: .r   zNo such TLS version: )rK   r   rh   
ssl_module
TLSVersionr   KeyError)tls_versions    r   _parse_tls_versionr      s|    e$11'}5
 	

$$[%8%8c%BCC 
11#K=1
 	

s   "A "A0c                     	 t         j                  j                         }|dz  | z  j                         S # t        t        f$ r Y y w xY w)Nz.postgresql)pathlibPathhomeRuntimeErrorr   resolve)filenamehomedirs     r   _dot_postgresql_pathr      sM    ,,##% m#h.7799 (# s   6 AAc           
      @  ) d }d x}x}x}x})d x}}| rt         j                  j                  |       }|j                  dvr.t	        j
                  dj                  |j                              |j                  r=d|j                  v r |j                  j                  d      \  }}}n|j                  }d}ndx}}|r|j                  d      \  }}}ndx}}|s|rt        ||d      \  }}|j                  rC|A|j                  }|j                  d      r|d	d  }t         j                  j                  |      }|!|rt         j                  j                  |      }|!|rt         j                  j                  |      }|j                  rt         j                  j                  |j                  d
      }|j                         D ]  \  }}t!        |t"              s|d   ||<     d|v r<|j%                  d      }|s)|r'|j'                  d      D cg c]  }t)        |       }}d|v r$|j%                  d      }|s|rt        ||      \  }}d|v r|j%                  d      }||}d|v r|j%                  d      }||}d|v r|j%                  d      }||}d|v r|j%                  d      }||}d|v r|j%                  d      }||}d|v r|j%                  d      }||}d|v r|j%                  d      }d|v r|j%                  d      }d|v r|j%                  d      }d|v r|j%                  d      }d|v r|j%                  d      )d|v r|j%                  d      }d|v r|j%                  d      }d|v r|j%                  d      }|
|}
|r|	|}	ni ||	}	|s0t*        j,                  j/                  d      }|rt        ||      \  }}|sdg}t0        dk(  rdg}ng d }t!        |t"        t2        f      s|g}||}|s\t*        j,                  j/                  d!      }|r8d|v r(|j'                  d      D cg c]  }t)        |       }}nIt)        |      }n=d"}n:t!        |t"        t2        f      r|D cg c]  }t)        |       }}nt)        |      }t5        ||      }|+t+        j6                  d#      }|st9        j:                         }|t+        j6                  d$      }|t+        j6                  d%      }||}|t	        j
                  d&      |t	        j
                  d'      |c|t+        j6                  d(      }|#t=        j>                         } | r
| t@        z  }nd }ntC        jD                  |      }|tG        |||||)      }g }!d*}"tI        ||      D ]p  \  }#}|#j                  d      rEd+|#vr/t*        j                  jK                  |#d,j                  |            }#|!jM                  |#       \|!jM                  |#|f       d}"r |!st	        jN                  d-      |t+        j6                  d.      }||"rd/}t!        |tP        tR        f      r	 tR        j                  |      }$|$tR        jV                  k  rd*}ntY        jZ                  tX        j\                        }|$tR        j^                  k\  |_0        |$tR        jb                  k  rtX        jd                  |_3        n|t+        j6                  d3      }|r(|ji                  |4       tX        jj                  |_3        nL	 tm        d5      }||ji                  |4       nt	        j
                  d6      	 tX        jj                  |_3        |t+        j6                  d?      }|r6|ji                  |4       |xjr                  tX        jt                  z  c_9        nCtm        d@      }|6	 |ji                  |4       |xjr                  tX        jt                  z  c_9        |t+        j6                  dA      }|stm        dB      }||jw                         sd })sd)|t+        j6                  dC      }|r|jy                  ||)fdDE       n%tm        dF      }|	 |jy                  ||)fdGE       t{        |dH      rBt*        j,                  j/                  dI      }'|'r!t|        j~                  j                  s|'|_A        |t+        j6                  dJ      }|rt        |      |_C        nt        dK      |_C        |t+        j6                  dL      }|rJt        |      |_D        n9|du r%tY        j                         }tR        j^                  }$ntR        j                  }$|	Wt!        |	t              r2t        dM |	D              r t        dN |	j                         D              st	        j
                  dO      |
$t+        j6                  dPt        j                        }
	 t        |
      }
t        |||||$||	|
R      }(|!|(fS c c}w c c}w c c}w # tT        $ rA d0jK                  d1 tR        D              }%t	        j
                  d2j                  |%            w xY w# t        j
                  tn        tp        f$ rp |$tR        jb                  kD  r)|d7}d8}&nd }&t	        j
                  d9| d:d;| d<|&=      |$tR        jb                  k(  rtX        jd                  |_3        nJ d>       Y w xY w# tn        tp        f$ r Y w xY w# tn        tp        f$ r Y w xY w# t        $ r? t	        j
                  dQj                  t        j                  j                  |
            d w xY w)SN>   postgres
postgresqlzQinvalid DSN: scheme is expected to be either "postgresql" or "postgres", got {!r}@rq   rs   Trk   rX   r   )strict_parsingr^   rn   r]   dbnamer'   r%   r&   r3   r   sslcertsslkeysslrootcertsslcrlsslpasswordssl_min_protocol_versionssl_max_protocol_versionr+   PGHOSTrY   r2   )z/run/postgresqlz/var/run/postgresqlz/tmpz/private/tmprY   ro   rp   PGUSER
PGPASSWORD
PGDATABASEz-could not determine user name to connect withz/could not determine database name to connect to
PGPASSFILE)rU   rV   r'   r%   r3   Fz	.s.PGSQL.z.s.PGSQL.{}z6could not determine the database address to connect to	PGSSLMODEr   z, c              3   T   K   | ]   }|j                   j                  d d       " yw)r   r   N)namer   )r;   r   s     r   r=   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s     H1affnnS#6Hs   &(z&`sslmode` parameter must be one of: {}PGSSLROOTCERT)cafilezroot.crtzDcannot determine location of user PostgreSQL configuration directoryz~/.postgresql/root.crtzCould not determine location of user home directory (HOME is either unset, inaccessible, or does not point to a valid directory)zroot certificate file "z&" does not exist or cannot be accessedz4Provide the certificate file directly or make sure "z" exists and is readable.)hintdetailunreachablePGSSLCRLzroot.crlPGSSLKEYzpostgresql.key	PGSSLCERTc                       S Nr"   r   s   r   <lambda>z-_parse_connect_dsn_and_args.<locals>.<lambda>L  s    k r   )keyfiler&   zpostgresql.crtc                       S r   r"   r   s   r   r   z-_parse_connect_dsn_and_args.<locals>.<lambda>U  s    [ r   keylog_filenameSSLKEYLOGFILEPGSSLMINPROTOCOLVERSIONzTLSv1.2PGSSLMAXPROTOCOLVERSIONc              3   <   K   | ]  }t        |t                y wr   r   r\   )r;   ks     r   r=   z._parse_connect_dsn_and_args.<locals>.<genexpr>x  s     @1Jq#&@   c              3   <   K   | ]  }t        |t                y wr   r   )r;   vs     r   r=   z._parse_connect_dsn_and_args.<locals>.<genexpr>y  s     I1Jq#&Ir   z:server_settings is expected to be None or a Dict[str, str]PGTARGETSESSIONATTRSz<target_session_attrs is expected to be one of {!r}, got {!r}r$   )Or|   r   urlparseschemer   rh   rC   netlocr{   r   pathrK   rl   queryparse_qsitemsr   rf   poprO   rw   rt   ru   rv   rD   rM   rj   getenvgetpassgetuserr   get_pg_home_directoryr   r   r   rd   r[   joinrL   InternalClientErrorr\   r   AttributeErrorr   r   
SSLContextPROTOCOL_TLS_CLIENTr    check_hostnamer   	CERT_NONEverify_modeload_verify_locationsCERT_REQUIREDr   FileNotFoundErrorNotADirectoryErrorverify_flagsVERIFY_CRL_CHECK_CHAINr?   load_cert_chainhasattrsysflagsignore_environmentr   r   minimum_versionmaximum_versioncreate_default_contextr   dictallvaluesSessionAttributeany
ValueError__members___ConnectionParameters)*dsnr]   r^   r%   r&   r3   r'   r(   r)   r*   r+   
auth_hostsr   r   r   r   r   r   parseddsn_authr   dsn_hostspecdsn_userdsn_passworddsn_databaser   keyvalr<   dsn_target_session_attrsr   r   r   addrshave_tcp_addrshr   modesr   
keylogfileparamsr   s*                                            @r   _parse_connect_dsn_and_argsr    s    J<@@G@f@{@Vk:>>7
&&s+== ::5577=vfmm7LN N ==fmm#,2MM,C,CC,H)!\%}}&((H|(0(:(:3(?%Ha&((H|(tTJJD$;;8+!;;L&&s++AB/||++L9H<H<<''1D||++L9H<<LL))&,,t)LE!KKM )Sc4(!$RE#J) ii',/IIcN;qCF;D;ii'!0d!;JD$5 ii)#"HU"ii
+#"Hii'<DU"ii
+#"HU"ii
+#"HE!ii	*;CE!))I.5 8,%#ii65 8,%#ii6)U2+099.,( *U2+099.,( &.+099*,( (/+C("*&+O&B&B/&BO::>>(+(48JD$!]
i=D9D dT5M*v
::>>(+h(0s(;<1A<<8}D	D4-	( $%1A%% 4ytT*D|yy"??$D99\*99\*|11;= 	= 11=? 	? yy.H224G"Z/||H-H1 !!#H
 END$ 	"1<<!#GGLLM$8$8$;<LLO LL!Q !N	" ,,DF 	F {ii$
{~#W~&	HmmC(G W]]"C''
(F(FGC!(G,?,?!?C(","6"6&"$))O"<K--[-A&0&>&>CO&C&::&F&255[5I","E"E!E#  JF +5*B*B>YYz2F--V-<$$
(I(II$1*=F)	B55V5D  ,, * A AB, ~:.-.>?%fmmo!F ))K0##V6I $  //?@&++#$*%8 ,  s-.ZZ^^O<
cii&B&B*4C''/+-995N+O('&8,'# '9&C#'/+-995N+O('&8,'# 
//1%%//"?D1@@@I0F0F0HII11  	  #!yy"$4$8$8 
	/0DE #HxSJ'1	3F &=m
 <F = &T  	HIIHHHE558??FH H	H< #;;)* 8
 #W__4*2.F%7 !' *.","E"E"9+ GB !C&66A] C?&? (.#  %7.8.B.BCO7-75 ,38T ..  ! !	!@ ./AB Z  11 ,,335I
 	sc   h<i i-i  5j (l) l? m A
jB
l&%l&)l<;l<?mmAnc                    t               }dD ]9  }||   }|t        |t              s|dk  s t        dj	                  ||             |.	 t        |t              rt        t        |      }|dk  rt        	 t        | ||||||||||      \  }}t        |||	|
      }|||fS # t        $ r t        dj	                  |            d w xY w)N>   r/   r1   r0   r   z4{} is expected to be greater or equal to 0, got {!r}zGinvalid command_timeout value: expected greater than 0 float (got {!r}))r   r]   r^   r%   r&   r3   r(   r)   r'   r*   r+   r-   )localsr   boolr   rC   floatr  _ClientConfiguration)r   r]   r^   r%   r&   r3   r'   r.   r/   r0   r1   r(   r)   r*   r+   
local_varsvar_namevar_valr   r  configs                        r   _parse_connect_argumentsr    s     J- E X&?j$77Q;**0&7*CE EE "
	0/40  #O4O!#   $ 0dDH#'13ME6 "'1&C%A	DF &&  '  	0;;A6#<%& ,00	0s   ,B& &%Cc                       e Zd Zd Zd Zd Zy)TLSUpgradeProtoc                 \    t        |      | _        || _        || _        || _        || _        y r   )_create_futureon_datar]   r^   ssl_contextssl_is_advisory)selfloopr]   r^   r  r  s         r   __init__zTLSUpgradeProto.__init__  s,    %d+		&.r   c                    |dk(  r| j                   j                  d       y | j                  rH| j                  j                  t
        j                  k(  r!|dk(  r| j                   j                  d       y | j                   j                  t        dj                  | j                  | j                                     y )N   ST   NFz9PostgreSQL server at "{host}:{port}" rejected SSL upgrade)r]   r^   )r  
set_resultr  r  r   r   r   set_exceptionConnectionErrorrC   r]   r^   )r  datas     r   data_receivedzTLSUpgradeProto.data_received  s    4<LL##D)""  ,,
0D0DD
 LL##E*LL&&++16!YYTYY ,2 ,89:r   c                     | j                   j                         s)|t        d      }| j                   j                  |       y y )Nz!unexpected connection_lost() call)r  doner  r  r  excs     r   connection_lostzTLSUpgradeProto.connection_lost  s9    ||  "{%&IJLL&&s+ #r   N)r   r   r   r  r  r$  r"   r   r   r  r    s    /:$,r   r  )r  c                  K   j                  fd       d {   \  }}|j                  t        j                  ddd             	 |j                   d {   }t        d      rW|r	 j                  ||       d {   }	n|}	 |        }
||
_        |
j                  |	       |	j                  |
       |	|
fS t        j                  j                   |       }|rt        j                  |      }t!        |      }|j#                         }t%        |       |j                          	  ||       d {   \  }	}
||
_        |	|
fS 7 67 # t
        t        j                  f$ r |j                           w xY w7 # t
        t        j                  f$ r |j                           w xY w7 u# t
        t        j                  f$ r |j                           w xY ww)	Nc                  "    t               S r   )r  )r]   r  r^   r  r  s   r   r   z(_create_ssl_connection.<locals>.<lambda>  s    dD +_> r   z!ll   i/	start_tls)server_hostname)r(   r)  sock)create_connectionwritestructpackr  	ExceptionasyncioCancelledErrorcloser   r(  is_sslconnection_madeset_protocol	functoolspartial_get_socketdup_set_nodelay)protocol_factoryr]   r^   r  r  r  trprdo_ssl_upgradenew_trpg_protoconn_factoryr+  s    `````       r   _create_ssl_connectionrC    s     ))	>d FB
 HHV[[8,-!zz)
 t[!#~~K  .  ? ? F#%(  (H%x ((""$46 $,,+tEL 2xxzT

	%1t%<<FH,HO8##] *w--. 

?w556 
4  = 7112 	JJL	s   G.E-G.E  #E$E  (G.7F FF B'G.<G  F>	G  G.E   +FG.F +F;;G.>G   +G++G.c                 B  K   |J |}t        |j                        rA|j                         }t        j                  |      r
| d {   }|j	                  |      }| |||||f}|j
                  t        j                  k(  r|}	|j	                  d       }nE|j
                  t        j                  k(  r|j	                  d       }	nt        |dg|  d {   S 	 t        |dg|  d {   S 7 7 7 # t        $ r Y nw xY wt        |	dg|  d {  7  S w)N)r&   )r(   FT)callabler&   inspectisawaitable_replacer   r   r   r   __connect_addr_RetryConnectSignal)
r   r  r  r  connection_classrecord_classparams_inputr&   argsparams_retrys
             r   _connect_addrrP    s     L ??$x(%~H(3$ 0,MD ~~&T*	7>>	)40 $FE9D999#FD84888# & : 9   e;d;;;;sg   ADC4	BDC6DC: /C80C: 3D6D8C: :	DDDDDDc                       e Zd Zy)rJ  N)r   r   r   r"   r   r   rJ  rJ  D  s    r   rJ  c                    K   t               fd}t        t              rj                  |      }	n j                  r- j
                  r! j                  |gd j                  i}	nV j                  r7t        |g j                   j                  t        j                  k(  d}	n j                  |g }	|	 d {   \  }
}	  d {     |||
||      }|j+                  |       |S 7 27 &# t        j                  t        j                  f$ rp |
j                          |r\ j                  t        j                  k(  r|j                   r) j                  t        j                  k(  r|j                   r
t#                t$        t&        j(                  f$ r |
j                           w xY ww)Nc                  6    t        j                         S r   )r   Protocol)r   	connectedr  r  rL  s   r   r   z __connect_addr.<locals>.<lambda>T  s    H--it5 r   r(   r  r  r  )r  r   r\   create_unix_connectionr(   r)   r,  rC  r   r   r   r   &InvalidAuthorizationSpecificationErrorConnectionDoesNotExistErrorr3  r   r4  rJ  r0  r1  r2  set_connection)r  retryr   r  r  rK  rL  rM  proto_factory	connectorr=  r>  conrU  s   ` ``  `      @r   rI  rI  H  s     t$I5M $//tD		)) +D**
 
&,jj
	 
*> >'+"NNgnn<>	 +D**=@4@	_FB!D 2r4v|
DCcJO  	99..  	
 NNgmm+BIINNgnn, &'' w--. 

s=   CG	DG	D
 !D"D
 &!G	D
 
B<GG	c                   $    e Zd ZdZdZdZdZdZdZy)r   r   primarystandbyzprefer-standbyz
read-writez	read-onlyN)	r   r   r   r   r`  ra  prefer_standby
read_write	read_onlyr"   r   r   r   r     s     
CGG%NJIr   r   should_be_in_hot_standbyc                       fd}|S )a  
    If the server didn't report "in_hot_standby" at startup, we must determine
    the state by checking "SELECT pg_catalog.pg_is_in_recovery()".
    If the server allows a connection and states it is in recovery it must
    be a replica/standby server.
    c                    K   | j                         }t        |dd       }|
|dk(  }|k(  S | j                  d       d {   }|k(  S 7 	w)Nin_hot_standbyonz%SELECT pg_catalog.pg_is_in_recovery())get_settingsr   fetchval)
connectionsettingshot_standby_statusis_in_hot_standbyre  s       r   can_be_usedz+_accept_in_hot_standby.<locals>.can_be_used  sr     **,$X/?F) 2d :
 !$<<< '1&9&97' ! !$<<<!s   >AA
Ar"   )re  rp  s   ` r   _accept_in_hot_standbyrq    s    	= r   should_be_read_onlyc                       fd}|S )zJ
    Verify the server has not set default_transaction_read_only=True
    c                    K   | j                         }t        |dd      }|dk(  rS  t              |        d {   S 7 w)Ndefault_transaction_read_onlyoffri  )rj  r   rq  )rl  rm  is_readonlyrr  s      r   rp  z&_accept_read_only.<locals>.can_be_used  sL     **,h(GO$&&@+,?@LLLLs   9AAAr"   )rr  rp  s   ` r   _accept_read_onlyrx    s    M r   c                    K   ywNTr"   )r   s    r   _accept_anyr{    s	     s   Tattrc                 @   K   t         |   } ||        d {   S 7 wr   )target_attrs_check)rl  r|  can_uses      r   _can_use_connectionr    s!      &G$$$$s   c           	      B  K   | t        j                         } t        di |\  }}}|j                  }g }d d }	|D ]E  }
	 t	        |
| ||||       d {   }|j                  |       t        ||       d {   r| n,G |t        j                  k(  r|rt        j                  |      t        j                  fd|D        ddi d {    rS |	xs$ t        j                  dj                  |            7 7 # t        $ r}|}	Y d }~d }~ww xY w7 Lw)N)r   r  r  r  rK  rL  c              3   H   K   | ]  }|us|j                           y wr   )r3  )r;   cchosen_connections     r   r=   z_connect.<locals>.<genexpr>  s     	F14E+E!'')	Fs   	""return_exceptionsTz=None of the hosts match the target attribute requirement {!r}r"   )r1  get_event_loopr  r+   rP  rL   r  OSErrorr   rb  randomchoicegatherr   TargetServerAttributeNotMatchedrC   )r  rK  rL  kwargsr   r  r  target_attr
candidates
last_errorr   connexr  s                @r   _connectr    sO    |%%'4>v>E66--KJJ :	&!1) D d#({;;;$(! <:" *999j &j 9
..	FZ	F  
   
 
BB	vk" 5 <  	J	s`   =DDD$D:D;DADD0DDD	DDDDDr  c                    K    G  fddt         j                        }t        |t              r j	                  ||       d {   \  }}n|j
                  r_|j                  t        j                  k7  rBt        |g| |j
                  |j                  t        j                  k(  d d {   \  }}n2  j                  |g|  d {   \  }}t        t        |             t        j                  ddd||      }	 |j!                  |       |j"                   d {    |j%                          y 7 7 7 o7 # |j%                          w xY ww)Nc                       e Zd Z fdZd Zy)_cancel.<locals>.CancelProtoc                 4    t              | _        d| _        y )NF)r  on_disconnectr4  )r  r  s    r   r  z%_cancel.<locals>.CancelProto.__init__  s    !/!5DDKr   c                 p    | j                   j                         s| j                   j                  d       y y rz  )r  r!  r  r"  s     r   r$  z,_cancel.<locals>.CancelProto.connection_lost  s-    %%**,""--d3 -r   N)r   r   r   r  r$  r  s   r   CancelProtor    s    	 	4r   r  rV  z!llll   i.)r1  rT  r   r\   rW  r(   r   r   r   rC  r   r,  r;  r9  r.  r/  r-  r  r3  )	r  r   r  backend_pidbackend_secretr  r=  r>  msgs	   `        r   _cancelr    s.    4g&& 4 $22;EEB::&..GMM91BB "JJ &'.. @B BFB 2411$"$ $FBR) ++gr8[.
IC


+ FB$ 	

sa   AED:A*E/D<0ED>4E E $E %E )E<E>E E EEc                 `    | j                  d      }|t        dj                  |             |S )Nsocketz+could not get the socket for transport {!r})get_extra_infor  rC   )	transportr+  s     r   r9  r9  %  s9    ##H-D|9@@KM 	MKr   c                     t        t        d      r| j                  t        j                  k7  r0| j	                  t        j
                  t        j                  d       y y )NAF_UNIXr   )r   r  familyr  
setsockoptIPPROTO_TCPTCP_NODELAYr*  s    r   r;  r;  .  s=    69%)F**F,>,>B *Gr   c                 t    	 | j                   } |       S # t        $ r t        j                  |       cY S w xY w)Nr  )create_futurer   r1  Future)r  r  s     r   r  r  3  s<    **   )~~4(()s    77)Jr1  collectionsenumr7  r   rt   r   platformr  rN   r  r(   r   rE   r.  r   typingurllib.parser|   rA   rF  rq   r   r   r   IntEnumr   
namedtupler   r  unamesystemrD   r   r   ListTupler\   rT   Optionalrw   rd   rj   r   r   r   r  r  rT  r  rC  rP  r0  rJ  rI  Enumr   r  rq  rx  r{  r   r`  ra  rb  rc  rd  r~  r  r  r  r9  r;  r  r"   r   r   <module>r     s}        	    	     
       7dll 7 /..	  .{--  (..

!
! iJJ(',, (;;v||CH-.(V"__W\\2"{{3" {{3" 	"
 "J 05 =@

:foogll&C :Nb+!\,g&& ,D EJ4n%<P	) 	HVsDII T *4 
 +4U;4T:##%;D%A!25!9 1$ 7 %0@ %
)X#)> #LC
r   