PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/__pycache__/
Upload File :
Current File : //opt/alt/python38/lib64/python3.8/site-packages/aiohttp/__pycache__/connector.cpython-38.opt-1.pyc
U

'�7`ا�@sNddlZddlZddlZddlZddlZddlZddlmZmZddl	m
Z
ddlmZddl
mZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"ddl#Z#d	d
l$m%Z%m&Z&d	dl'm(Z(d	dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2d	d
l3m4Z4d	dl5m6Z6m7Z7m8Z8d	dl&m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>d	dl?m@Z@d	dlAmBZBd	dlCmDZDzddlEZEeEjFZFWneGk
�r�dZEeHZFYnXdZIe�r�d	dlJmKZKd	dl5mLZLd	dlMmNZNGdd�d�ZOGdd�d�ZPGdd�d�ZQGdd�d�ZRGdd �d �ZSGd!d"�d"eR�ZTGd#d$�d$eR�ZUGd%d&�d&eR�ZVdS)'�N)�defaultdict�deque)�suppress)�SimpleCookie)�cycle�islice)�	monotonic)�
TracebackType)�
TYPE_CHECKING�Any�	Awaitable�Callable�DefaultDict�Dict�Iterator�List�Optional�Set�Tuple�Type�Union�cast�)�hdrs�helpers)�AbstractResolver)	�ClientConnectionError�ClientConnectorCertificateError�ClientConnectorError�ClientConnectorSSLError�ClientHttpProxyError�ClientProxyConnectionError�ServerFingerprintMismatch�cert_errors�
ssl_errors)�ResponseHandler)�
ClientRequest�Fingerprint�_merge_ssl_params)�PY_36�CeilTimeout�get_running_loop�
is_ip_address�noop�sentinel)�	RESPONSES)�EventResultOrError)�DefaultResolver)�
BaseConnector�TCPConnector�
UnixConnector�NamedPipeConnector)�
ClientTimeout)�
ConnectionKey)�Tracec@s@eZdZdZeedd�dd�Zed�dd�Zdd�d	d
�ZdS)�_DeprecationWaiter��
_awaitable�_awaitedN)�	awaitable�returncCs||_d|_dS�NFr:)�selfr=�rA�D/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/connector.py�__init__Isz_DeprecationWaiter.__init__�r>cCsd|_|j��S�NT)r<r;�	__await__�r@rArArBrFMsz_DeprecationWaiter.__await__cCs|jst�dt�dS)NzDConnector.close() is a coroutine, please use await connector.close())r<�warnings�warn�DeprecationWarningrGrArArB�__del__Qs
�z_DeprecationWaiter.__del__)	�__name__�
__module__�__qualname__�	__slots__rrrCrFrKrArArArBr9Fsr9c@s�eZdZdZdZddeejdd�dd�Ze	d�dd	�Z
efedd
�dd�Z
eejd�d
d��Zeeejd�dd��Zeeed�dd��Zegdfdd�dd�Zdd�dd�Zdd�dd�Zdd�dd�Zeed�dd��ZdS)�
ConnectionNr2r7)�	connector�key�protocol�loopr>cCs<||_||_||_||_g|_|��r8t�t�	d��|_
dS)Nr)�_key�
_connector�_loop�	_protocol�
_callbacks�	get_debug�	traceback�
extract_stack�sys�	_getframe�_source_traceback)r@rQrRrSrTrArArBrC_szConnection.__init__rDcCsd|j�d�S)NzConnection<�>)rUrGrArArB�__repr__oszConnection.__repr__��	_warningsr>cCs�|jdk	r�trd|i}ni}|jd|��tf|�|j��r@dS|jj|j|jdd�|dd�}|j	dk	rt|j	|d<|j�
|�dS)N�sourcezUnclosed connection T��should_closezUnclosed connection)Zclient_connection�message�source_traceback)rXr)rI�ResourceWarningrW�	is_closedrV�_releaserUr_�call_exception_handler)r@rc�kwargs�contextrArArBrKrs





zConnection.__del__cCstjdtdd�|jS)Nz%connector.loop property is deprecated�)�
stacklevel)rHrIrJrWrGrArArBrT�s�zConnection.loopcCs|jdkrdS|jjS�N)rX�	transportrGrArArBrr�s
zConnection.transportcCs|jSrq)rXrGrArArBrS�szConnection.protocol)�callbackr>cCs|dk	r|j�|�dSrq)rY�append)r@rsrArArB�add_callback�szConnection.add_callbackc
Cs>|jdd�g}|_|D]}tt��|�W5QRXqdSrq)rYr�	Exception)r@Z	callbacks�cbrArArB�_notify_release�s
zConnection._notify_releasecCs2|��|jdk	r.|jj|j|jdd�d|_dS)NTre)rxrXrVrkrUrGrArArB�close�s
zConnection.closecCs6|��|jdk	r2|jj|j|j|jjd�d|_dS)Nre)rxrXrVrkrUrfrGrArArB�release�s
�zConnection.releasecCs|jdkp|j��Srq)rX�is_connectedrGrArArB�closed�szConnection.closed)rLrMrNr_�
_transportr%�asyncio�AbstractEventLooprC�strrarHrrK�propertyrTr�	TransportrrrSr
rurxryrz�boolr|rArArArBrPZs,�	rPc@seZdZdZdd�dd�ZdS)�_TransportPlaceholderz0 placeholder for BaseConnector.connect function NrDcCsdSrqrArGrArArBry�sz_TransportPlaceholder.close)rLrMrN�__doc__ryrArArArBr��sr�c	@s�eZdZdZdZdZdZedddddd�ee	de
feeeee
ejdd	�d
d�Zefedd�d
d�Zdd�dd�Zedd�dd�Zdd�dd�ZdDe
eee
ee
edd�dd�Zeed�dd��Zeed�dd��Zeed�dd��Zdd�d d!�Zd"e dd#�d$d%�Z!dd�d&d'�Z"e#dd�d(d)�Z$dd�d*d+�Z%eed�d,d-��Z&d"ed.�d/d0�Z'd1e(d2d3e)d4�d5d6�Z*d"e
e d.�d7d8�Z+dd�d9d:�Z,d"e dd;�d<d=�Z-dd>�d"e edd?�d@dA�Z.d1e(d2d3e d4�dBdC�Z/dS)Er2a�Base connector class.

    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    enable_cleanup_closed - Enables clean-up closed ssl transports.
                            Disabled by default.
    loop - Optional event loop.
    TNg@F�dr��keepalive_timeout�force_close�limit�limit_per_host�enable_cleanup_closedrT)r�r�r�r�r�rTr>cCs�|r|dk	r*|tk	r*td��n|tkr*d}t|�}d|_|��rRt�t�d��|_	i|_
||_||_t
�|_tt
�|_tt|�|_||_tt�|_||_tjt|d�|_t�|_d|_d|_||_ g|_!|�"�dS)Nz6keepalive_timeout cannot be set if force_close is Trueg.@Fr�rT)#r.�
ValueErrorr+�_closedrZr[r\r]r^r_�_conns�_limit�_limit_per_host�set�	_acquiredr�_acquired_per_hostr�float�_keepalive_timeout�_force_closer�_waitersrW�	functools�partialr%�_factoryrZcookies�_cleanup_handle�_cleanup_closed_handle�_cleanup_closed_disabled�_cleanup_closed_transports�_cleanup_closed)r@r�r�r�r�r�rTrArArBrC�s<���
zBaseConnector.__init__rbcCs�|jr
dS|jsdSdd�|j��D�}|��tr>d|i}ni}|jd|��tf|�||dd�}|jdk	rx|j|d<|j�	|�dS)NcSsg|]}t|��qSrA)�repr)�.0�crArArB�
<listcomp>sz)BaseConnector.__del__.<locals>.<listcomp>rdzUnclosed connector zUnclosed connector)rQ�connectionsrgrh)
r�r��values�_closer)rIrir_rWrl)r@rc�connsrmrnrArArBrKs"
�

zBaseConnector.__del__rDcCst�dt�|S)NzH"witn Connector():" is deprecated, use "async with Connector():" instead)rHrIrJrGrArArB�	__enter__s
�zBaseConnector.__enter__)�excr>cGs|��dSrq�ry)r@r�rArArB�__exit__%szBaseConnector.__exit__c�s|SrqrArGrArArB�
__aenter__(szBaseConnector.__aenter__)�exc_type�	exc_value�
exc_tracebackr>c�s|��IdHdSrqr�)r@r�r�r�rArArB�	__aexit__+szBaseConnector.__aexit__cCs|jS)z1Ultimately close connection on releasing if True.)r�rGrArArBr�3szBaseConnector.force_closecCs|jS)z�The total number for simultaneous connections.

        If limit is 0 the connector has no limit.
        The default limit size is 100.
        )r�rGrArArBr�8szBaseConnector.limitcCs|jS)z�The limit_per_host for simultaneous connections
        to the same endpoint.

        Endpoints are the same if they are have equal
        (host, port, is_ssl) triple.

        )r�rGrArArBr�As	zBaseConnector.limit_per_hostcCs|jr|j��d|_|j��}|j}|jr�i}||}|j��D]�\}}g}|D]z\}}	|��r�|	|dkr�|j}
|�	�|j
r�|js�|j�
|
�q�|�
||	f�qR|j}
|�	�|j
rR|jsR|j�
|
�qR|rB|||<qB||_|jr�t�|d||j�|_dS)zCleanup unused transports.Nr�_cleanup)r��cancelrW�timer�r��itemsr{rrry�is_sslr�r�rtr�weakref_handle)r@Znow�timeoutr�ZdeadlinerRr�Zalive�protoZuse_timerrrArArBr�Ls@


�zBaseConnector._cleanupr7)rR�valr>cCs4|j}||krdS||}|�|�|s0|j|=dSrq)r��remove)r@rRr�Zacquired_per_hostr�rArArB�_drop_acquired_per_hostus
z%BaseConnector._drop_acquired_per_hostcCsR|jr|j��|jD]}|dk	r|��qg|_|jsNt�|d|j|j�|_dS)z}Double confirmation for transport close.
        Some broken ssl servers may leave socket open without proper close.
        Nr�)	r�r�r��abortr�rr��_cleanup_closed_periodrW)r@rrrArArBr��s


�zBaseConnector._cleanup_closedcCs|��tt��S)zClose all opened transports.)r�r9r-rGrArArBry�szBaseConnector.closecCs�|jr
dSd|_z�|j�	�r$W�~dS|jr4|j�
�|jrD|j�
�|j��D]}|D]\}}|��qVqN|jD]}|��qp|jD]}|dk	r�|�
�q�W5|j��|j��|j��d|_|j��d|_XdSrE)r�r��clearr�r�r�r�r�rWrjr�r�ryr�)r@�datar��t0rrrArArBr��s0









zBaseConnector._closecCs|jS)z;Is connector closed.

        A readonly property.
        )r�rGrArArBr|�szBaseConnector.closed�rRr>cCs~|jrJ|jt|j�}|jrz|dkrz||jkrz|j�|�}|jt|�}n0|jrv||jkrv|j�|�}|jt|�}nd}|S)z�
        Return number of available connections taking into account
        the limit, limit_per_host and the connection key.

        If it returns less than 1 means that there is no connections
        availables.
        rr)r��lenr�r�r��get)r@rR�	availableZacquiredrArArB�_available_connections�s	���z$BaseConnector._available_connectionsr&r8r6��req�tracesr�r>c�sb|j}|�|�}|dks$||jk�r|j��}|j|�|�|rZ|D]}|��IdHqFznz|IdHWnZtk
r�}z<||jkr�z|j|�|�Wnt	k
r�YnX|�W5d}~XYnXW5||jkr�|j|s�|j|=X|�r|D]}|�
�IdHq�|�|�}	|	dk�rtt
t��}
|j�|
�|j|�|
�|�rb|D]}|��IdH�qLz0|�|||�IdH}	|j�r�|	��td��Wn@tk
�r�|j�s�|j�|
�|�||
�|���Yn"X|j�s�|j�|
�|�||
�|�r6|D]}|��IdH�q�n |�r6|D]}|��IdH�q |j�|	�|j|�|	�t|||	|j�S)z'Get from pool or create new connection.rNzConnector is closed.)�connection_keyr�r�rWZ
create_futurertZsend_connection_queued_start�
BaseExceptionr�r�Zsend_connection_queued_end�_getrr%r�r��addr�Zsend_connection_create_start�_create_connectionr�ryrr��_release_waiterZsend_connection_create_endZsend_connection_reuseconnrP)r@r�r�r�rRr��fut�trace�er�ZplaceholderrArArB�connect�sj





zBaseConnector.connectcCs�z|j|}Wntk
r$YdSX|j��}|r�|��\}}|��r�|||jkr~|j}|��|j	r�|j
s�|j�|�q�|s�|j|=|Sq0|j}|��|j	r0|j
s0|j�|�q0|j|=dSrq)
r��KeyErrorrWr��popr{r�rrryr�r�r�rt)r@rRr��t1r�r�rrrArArBr�2s,
zBaseConnector._getcCsp|js
dSt|j���}t�|�|D]D}|�|�dkr:q&|j|}|r&|��}|��sD|�d�dSqDq&dS)z�
        Iterates over all waiters till found one that is not finsihed and
        belongs to a host that has available connections.
        Nr)	r��list�keys�randomZshuffler��popleftZdoneZ
set_result)r@ZqueuesrR�waitersZwaiterrArArBr�Qs


zBaseConnector._release_waiter)rRr�r>cCsH|jr
dSz|j�|�|�||�Wntk
r:Yn
X|��dSrq)r�r�r�r�r�r�)r@rRr�rArArB�_release_acquirediszBaseConnector._release_acquiredre)rRrSrfr>cCs�|jr
dS|�||�|jr d}|s*|jrR|j}|��|jr�|js�|j�	|�nV|j
�|�}|dkrtg}|j
|<|�	||j�
�f�|jdkr�t�|d|j|j�|_dS)NTr�)r�r�r�rfrrryr�r�r�rtr�r�rWr�r�rr�r�)r@rRrSrfrrr�rArArBrkxs*

�zBaseConnector._releasec�s
t��dSrq)�NotImplementedError)r@r�r�r�rArArBr��sz BaseConnector._create_connection)NNN)0rLrMrNr�r�r_r�r.r�objectr�r��intrr~rrCrHrrKr�r�r�rr�r	r�r�r�r�r�r�r%r�r�rryr�r|r�rrPr�r�r�r�rkr�rArArArBr2�s���7�
�
*�%"�M��"�r2c@s�eZdZdeedd�dd�Zeed�dd�Ze	e
efee
e
efdd�d	d
�Ze	e
efdd�dd
�Zdd�dd�Ze	e
efee
e
efd�dd�Ze	e
efed�dd�ZdS)�_DNSCacheTableN)�ttlr>cCsi|_i|_||_dSrq)�	_addrs_rr�_timestamps�_ttl)r@r�rArArBrC�s�z_DNSCacheTable.__init__)�hostr>cCs
||jkSrq)r�)r@r�rArArB�__contains__�sz_DNSCacheTable.__contains__)rR�addrsr>cCs,t|�t|�f|j|<|jr(t�|j|<dSrq)rr�r�r�rr�)r@rRr�rArArBr��sz_DNSCacheTable.addr�cCs&|j�|d�|jr"|j�|d�dSrq)r�r�r�r��r@rRrArArBr��sz_DNSCacheTable.removerDcCs|j��|j��dSrq)r�r�r�rGrArArBr��s
z_DNSCacheTable.clearcCs(|j|\}}tt||��}t|�|Srq)r�r�r�next)r@rRrTZlengthr�rArArB�
next_addrs�sz_DNSCacheTable.next_addrscCs$|jdkrdS|j||jt�kSr?)r�r�rr�rArArB�expired�s
z_DNSCacheTable.expired)N)rLrMrNrr�rCr�r�r�rr�r�rrrr�r�r�r�r�rArArArBr��s&$r�cs�eZdZdZdddddddddedddddd�eeeeeeeee	e
deee	feee
efeee
deefeeeeeejd��fd	d
�Zedd��fdd
�Zeed�dd��Zeed�dd��Zd0ee
eedd�dd�Zd1e
eeedeee
efd�dd�Zdedded�dd�Ze e!�"d�ee	d�dd ���Z#dee	d!�d"d#�Z$ded$d!�d%d&�Z%e&d'�edde'e(eeej)efd(�d)d*�Z*e&d'�dedde'e(eej)efd+�d,d-�Z+deddeej)efd�d.d/�Z,�Z-S)2r3a/TCP connector.

    verify_ssl - Set to True to check ssl certifications.
    fingerprint - Pass the binary sha256
        digest of the expected certificate in DER format to verify
        that the certificate the server presents matches. See also
        https://en.wikipedia.org/wiki/Transport_Layer_Security#Certificate_pinning
    resolver - Enable DNS lookups and use this
        resolver
    use_dns_cache - Use memory cache for DNS lookups.
    ttl_dns_cache - Max seconds having cached a DNS entry, None forever.
    family - socket address family
    local_addr - local tuple of (host, port) to bind socket to

    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    enable_cleanup_closed - Enables clean-up closed ssl transports.
                            Disabled by default.
    loop - Optional event loop.
    TN�
rFr�)�
verify_ssl�fingerprint�
use_dns_cache�
ttl_dns_cache�family�ssl_context�ssl�
local_addr�resolverr�r�r�r�r�rTcsjt�j|
|||
||d�t||||�|_|	dkr<t|jd�}	|	|_||_t|d�|_	i|_
||_||_dS)Nr�r�)r�)
�superrCr(�_sslr1rW�	_resolver�_use_dns_cacher��
_cached_hosts�_throttle_dns_events�_family�_local_addr)r@r�r�r�r�r�r�r�r�r�r�r�r�r�r�rT��	__class__rArBrC�s$�	�zTCPConnector.__init__rDcs"|j��D]}|��q
t���S)zClose all ongoing DNS calls.)r�r�r�r�ry)r@Zevr�rArBry
s
zTCPConnector.closecCs|jS)zSocket family like AF_INET.)r�rGrArArBr�szTCPConnector.familycCs|jS)z%True if local DNS caching is enabled.)r�rGrArArBr�szTCPConnector.use_dns_cache)r��portr>cCsJ|dk	r"|dk	r"|j�||f�n$|dk	s2|dk	r<td��n
|j��dS)z8Remove specified host/port or clear all dns local cache.Nz5either both host and port or none of them are allowed)r�r�r�r�)r@r�rrArArB�clear_dns_caches

zTCPConnector.clear_dns_cacher8)r�rr�r>c
�st|�r||||jddd�gS|js~|rB|D]}|�|�IdHq,|jj|||jd�IdH}|rz|D]}|�|�IdHqd|S||f}||jkr�|j�|�s�|j�	|�}|r�|D]}|�
|�IdHq�|S||jk�r|j|}|r�|D]}|�
|�IdHq�|��IdHn�t
|j�|j|<|�r@|D]}|�|�IdH�q(z�z~|�rf|D]}|�|�IdH�qN|jj|||jd�IdH}	|�r�|D]}|�|�IdH�q�|j�||	�|j|��Wn8tk
�r�}
z|j|j|
d��W5d}
~
XYnXW5|j�|�X|j�	|�S)Nr)�hostnamer�rr�r��flags)r�)r�)r,r�r�Zsend_dns_resolvehost_startr�ZresolveZsend_dns_resolvehost_endr�r�r�Zsend_dns_cache_hitr��waitr0rWZsend_dns_cache_missr�r�r�r�)r@r�rr�r��resrR�resultZeventr�r�rArArB�
_resolve_host&sd��
zTCPConnector._resolve_hostr&r6r�c�s<|jr |�|||�IdH\}}n|�|||�IdH\}}|S)zcCreate connection.

        Has same keyword arguments as BaseEventLoop.create_connection.
        N)�proxy�_create_proxy_connection�_create_direct_connection)r@r�r�r��_r�rArArBr�rszTCPConnector._create_connection)�verifiedr>c
Cs�|rt��St�tj�}|jtjO_|jtjO_z|jtjO_Wn2tk
r~}zt	�
d�|��W5d}~XYnX|��|SdS)Nz�{!s}: The Python interpreter is compiled against OpenSSL < 1.0.0. Ref: https://docs.python.org/3/library/ssl.html#ssl.OP_NO_COMPRESSION)
r�Zcreate_default_context�
SSLContextZPROTOCOL_SSLv23ZoptionsZOP_NO_SSLv2ZOP_NO_SSLv3ZOP_NO_COMPRESSION�AttributeErrorrHrI�formatZset_default_verify_paths)r
�
sslcontextZattr_errrArArB�_make_ssl_context�s��zTCPConnector._make_ssl_context)r�r>cCsz|��rrtdkrtd��|j}t|tj�r.|S|dk	r@|�d�S|j}t|tj�rV|S|dk	rh|�d�S|�d�SdSdS)a*Logic to get the correct SSL context

        0. if req.ssl is false, return None

        1. if ssl_context is specified in req, use it
        2. if _ssl_context is specified in self, use it
        3. otherwise:
            1. if verify_ssl is not specified in req, use self.ssl_context
               (will generate a default context according to self.verify_ssl)
            2. if verify_ssl is True in req, generate a default SSL context
            3. if verify_ssl is False in req, generate a SSL context that
               won't verify
        NzSSL is not supported.FT)r�r��RuntimeError�
isinstancerrr�)r@r�rrArArB�_get_ssl_context�s


zTCPConnector._get_ssl_contextr'cCs,|j}t|t�r|S|j}t|t�r(|SdSrq)r�rr'r�)r@r�ZretrArArB�_get_fingerprint�s

zTCPConnector._get_fingerprint��client_error)�argsr�r�rrmr>c
�s�z8t|j��$|jj||�IdHW5QR�WSQRXWn�tk
rh}zt|j|�|�W5d}~XYn^tk
r�}zt|j|�|�W5d}~XYn0t	k
r�}z||j|�|�W5d}~XYnXdSrq)
r*�sock_connectrWZcreate_connectionr#rr�r$r�OSError)r@r�r�rrrmr�rArArB�_wrap_create_connection�s,z$TCPConnector._wrap_create_connection)r�r�r�rr>c�s�|�|�}|�|�}|jj}|j}tj|j|||d�|jd�}	zt�	|	�IdH}
Wn`tj
k
r�ddd�dd�}|	�|��Yn0tk
r�}zt
|j|�|�W5d}~XYnXd}
|
D�]
}|d}|d}zN|j|j|||||d	|d
|d|�r|dnd|j||d
�IdH\}}Wn0t
k
�rP}z|}
WY�q�W5d}~XYnX|���r�|�r�z|�|�WnLtk
�r�}z,|��|j�s�|j�|�|}
WY�q�W5d}~XYnX||fS|
�dS)N)r�r�z$asyncio.Future[List[Dict[str, Any]]])r�r>c	Ss$tttj��|��W5QRXdSrq)rrvr~�CancelledErrorr)r�rArArB�drop_exception�sz>TCPConnector._create_direct_connection.<locals>.drop_exceptionr�rr�r�rr)	r�r�r�r�r�server_hostnamer�r�r)rr�urlZraw_hostrr~Z
ensure_futurerrWZshieldrZadd_done_callbackrrr�rr�r�r�Zcheckr"ryr�r�rt)r@r�r�r�rrr�r�rZ
host_resolvedZhostsrr��last_excZhinfoZtranspr�rArArBr�sb

�
 
�z&TCPConnector._create_direct_connectionc�si}|jdk	r|j}|jtj|tj<|j}ttj|||j|j|j	d�}|j
|g|td�IdH\}}|��|j�
tjd�}	|	dk	r�|��s�|	|jtj<n|	|jtj<|���r|�|�}
tj|_|j|_tj|jdddd�}t||||j�}|�|�IdH}
z�z"|j}|��|
�|�IdH}Wn(tk
�rJ|
��|���Yn�Xd|_d|_zp|j dk�r�|j!}|dk�r�t"|j d}t#|
j$|j%|j ||jd��|j&ddd�}|dk�r�t'd	��|�(�}W5|��X|j)|j*||
||j+|d
�IdH\}}W5|
��X||fS)N)�headers�authrTr�r)r	�
proxy_authZproxy_headers_hash��r)�statusrgr"Zsocket)�defaultz)Transport does not expose socket instance)r�r�Zsockrr�),Z
proxy_headersr"rZHOSTr	r&ZMETH_GETr$rWr�rr!r�r�Z
AUTHORIZATIONr�ZPROXY_AUTHORIZATIONrZMETH_CONNECT�methodr �attrZevolver�rP�sendryrXZset_response_params�startr�r}r&�reasonr/r Zrequest_info�historyZget_extra_infor�duprr�r�)r@r�r�r�r"r Z	proxy_reqrrr�r#rrRZconnZ
proxy_resprSZresprgZrawsockrArArBr
s�
�
�


�
�

�	
z%TCPConnector._create_proxy_connection)NN)N).rLrMrNr�r.r�r�bytesr�rrr'rr�rr�r�r~rrCrryr�r�r�rrrrrr%r��staticmethodr��	lru_cacherrrrrrvr�rrr
�
__classcell__rArAr�rBr3�s���)���
�M�!����M�r3c	sxeZdZdZdedddfeeeee	dfe
e
eej
dd��fdd�
Zeed	�d
d��Zded
ded�dd�Z�ZS)r4a�Unix socket connector.

    path - Unix socket path.
    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    loop - Optional event loop.
    Fr�rN��pathr�r�r�r�rTr>cs t�j|||||d�||_dS)N�r�r�r�r�rT)r�rC�_path�r@r4r�r�r�r�rTr�rArBrC�s	�zUnixConnector.__init__rDcCs|jS)zPath to unix socket.�r6rGrArArBr4�szUnixConnector.pathr&r8r6r�c
�srz6t|j��"|j�|j|j�IdH\}}W5QRXWn0tk
rf}zt|j|�|�W5d}~XYnXt	t
|�Srq)r*rrWZcreate_unix_connectionr�r6rrr�rr%�r@r�r�r�rr�r�rArArBr��s� z UnixConnector._create_connection�rLrMrNr�r.r�r�rr�r�r�rr~rrCr�r4rr%r�r2rArAr�rBr4�s,���r4c	sxeZdZdZdedddfeeeee	dfe
e
eej
dd��fdd�
Zeed	�d
d��Zded
ded�dd�Z�ZS)r5aNamed pipe connector.

    Only supported by the proactor event loop.
    See also: https://docs.python.org/3.7/library/asyncio-eventloop.html

    path - Windows named pipe path.
    keepalive_timeout - (optional) Keep-alive timeout.
    force_close - Set to True to force close and do reconnect
        after each request (and between redirects).
    limit - The total number of simultaneous connections.
    limit_per_host - Number of simultaneous connections to one host.
    loop - Optional event loop.
    Fr�rNr3cs6t�j|||||d�t|jtj�s,td��||_dS)Nr5z9Named Pipes only available in proactor loop under windows)r�rCrrWr~ZProactorEventLooprr6r7r�rArBrC�s	��zNamedPipeConnector.__init__rDcCs|jS)zPath to the named pipe.r8rGrArArBr4�szNamedPipeConnector.pathr&r8r6r�c
�s�zFt|j��2|j�|j|j�IdH\}}t�d�IdHW5QRXWn0tk
rv}zt	|j
|�|�W5d}~XYnXtt|�S)Nr)
r*rrWZcreate_pipe_connectionr�r6r~�sleeprrr�rr%r9rArArBr��s� z%NamedPipeConnector._create_connectionr:rArAr�rBr5�s,���r5)Wr~r�r�r]r[rH�collectionsrr�
contextlibrZhttp.cookiesr�	itertoolsrrr�r�typesr	�typingr
rrr
rrrrrrrrrrr)�rr�abcrZclient_exceptionsrrrrr r!r"r#r$Zclient_protor%Z
client_reqrepr&r'r(r)r*r+r,r-r.Zhttpr/Zlocksr0r�r1r�r�ImportErrorr��__all__Zclientr6r7�tracingr8r9rPr�r2r�r3r4r5rArArArB�<module>s^@, 

Zg)<1