PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/lib64/python2.7
Viewing File: /usr/lib64/python2.7/urllib.pyo
� �A�ic@s�dZddlZddlZddlZddlZddlZddlZddlZddlm Z dddddd d d d d ddddddddddddddddddgZ d Z d!Z ejd"kr�dd#lmZmZn:ejd$kr dd#lmZmZnd%�Zd&�Zeaeed'�Zeeed(�Zd)�ZyddlZWn eZnXeZd*efd+��YZiZdfd,��YZdefd-��YZ ea!d.�Z"ea#d/�Z$ea%d0�Z&ea'd1�Z(d2fd3��YZ)d4fd5��YZ*d6e*fd7��YZ+d8e*fd9��YZ,d:e*fd;��YZ-ye.Wne/k r�d<�Z0n Xd=�Z0d>�Z1d?�Z2ea3d@�Z4ea5dA�Z6ea7dB�Z8ea9dC�Z:ea;dD�Z<ea=ddE�Z>ea?dF�Z@eaAdG�ZBdH�ZCeaDdI�ZEdJZFeGdK�eFD��ZHejIdL�ZJdM�ZKdN�ZLdOZMiZNxfeOePdP�eQeRePdP����D]=\ZSZTeSdQko�eTeMkr�eTn dRjUeS�eNeT<q�WiZVdSdT�ZWdUdV�ZXdWdX�ZYdY�ZZdZ�Z[ej\d[kr~dd\l]m^Z^m_Z_d]�Z`d^�Zad_�Zbd`�ZcnBejd"kr�da�Zddb�Zcdc�Zedd�Zbn eZZce[Zbde�Zfdf�ZgdS(gs�Open an arbitrary URL. See the following document for more info on URLs: "Names and Addresses, URIs, URLs, URNs, URCs", at http://www.w3.org/pub/WWW/Addressing/Overview.html See also the HTTP spec (from which the error codes are derived): "HTTP - Hypertext Transfer Protocol", at http://www.w3.org/pub/WWW/Protocols/ Related standards and specs: - RFC1808: the "relative URL" spec. (authoritative status) - RFC1738 - the "URL standard". (authoritative status) - RFC1630 - the "URI spec". (informational status) The object returned by URLopener().open(file) will differ per protocol. All you know is that is has methods read(), readline(), readlines(), fileno(), close() and info(). The read*(), fileno() and close() methods work like those of open files. The info() method returns a mimetools.Message object which can be used to query various info about the object, if available. (mimetools.Message objects are queried with the getheader() method.) i����N(turljointurlopent URLopenertFancyURLopenert urlretrievet urlcleanuptquotet quote_plustunquotet unquote_plust urlencodet url2pathnamet pathname2urltsplittagt localhosttthishostt ftperrorstbasejointunwrapt splittypet splithostt splitusert splitpasswdt splitportt splitnportt splitqueryt splitattrt splitvaluet getproxiess1.17i tnt(R R triscoscCs t|�S(sOS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.(R(tpathname((s/usr/lib64/python2.7/urllib.pyR 5scCs t|�S(sOS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.(R(R((s/usr/lib64/python2.7/urllib.pyR :scCs�ddlm}|ddd�|dk r>td|�}ntsVt�}|ant}|dkru|j|�S|j||�SdS(s=Create a file-like object for the specified URL to read from.i����(twarnpy3ksMurllib.urlopen() has been removed in Python 3.0 in favor of urllib2.urlopen()t stacklevelitproxiesN(twarningsR tNoneRt _urlopenertopen(turltdataR"R topener((s/usr/lib64/python2.7/urllib.pyRHs      cCs(tst�antj||||�S(N(R%Rtretrieve(R'tfilenamet reporthookR(((s/usr/lib64/python2.7/urllib.pyRZs cCs+trtj�ntj�tj�dS(N(R%tcleanupt _safe_quoterstcleartftpcache(((s/usr/lib64/python2.7/urllib.pyR_s  tContentTooShortErrorcBseZd�ZRS(cCstj||�||_dS(N(tIOErrort__init__tcontent(tselftmessageR4((s/usr/lib64/python2.7/urllib.pyR3os(t__name__t __module__R3(((s/usr/lib64/python2.7/urllib.pyR1nscBs�eZdZdZdeZdd�Zd�Zd�Z d�Z d�Z dd�Z dd�Z dd �Zdddd �Zdd �Zdd �Zd �Zer�dd�Znd�Zd�Zd�Zdd�ZRS(s,Class to open URLs. This is a class rather than just a subroutine because we may need more than one set of global protocol-specific options. Note -- this is a base class for those who don't want the automatic handling of errors type 302 (relocated) and 401 (authorization needed).sPython-urllib/%scKs�|dkrt�}n||_|jd�|_|jd�|_d|jfg|_g|_t j |_ d|_ t |_ dS(Ntkey_filet cert_files User-Agent(R$RR"tgetR9R:tversiont addheaderst_URLopener__tempfilestostunlinkt_URLopener__unlinkt tempcacheR0(R5R"tx509((s/usr/lib64/python2.7/urllib.pyR3�s      cCs|j�dS(N(tclose(R5((s/usr/lib64/python2.7/urllib.pyt__del__�scCs|j�dS(N(R-(R5((s/usr/lib64/python2.7/urllib.pyRD�scCsi|jrLx6|jD]+}y|j|�Wqtk r=qXqW|j2n|jre|jj�ndS(N(R>RAtOSErrorRBR/(R5tfile((s/usr/lib64/python2.7/urllib.pyR-�s    cGs|jj|�dS(sdAdd a header to be used by the HTTP interface only e.g. u.addheader('Accept', 'sound/basic')N(R=tappend(R5targs((s/usr/lib64/python2.7/urllib.pyt addheader�scCs�tt|��}t|dd�}|jrn||jkrn|j|\}}t|d�}t|||�St|�\}}|s�d}n||jkr�|j|}t|�\}} t| �\} } | |f}nd }d|} ||_ | j dd�} t || � s%| dkrQ|r>|j |||�S|j||�Sny9|d krst|| �|�St|| �||�SWn2tjk r�} td | ftj�d �nXd S( s6Use URLopener().open(file) instead of open(file, 'r').tsafes%/:=&?~#+!$,;'@()*[]|trbRGtopen_t-t_topen_local_files socket erroriN(RttoBytesRRBR&t addinfourlRR"RR$ttypetreplacethasattrtopen_unknown_proxyt open_unknowntgetattrtsocketterrorR2tsystexc_info(R5tfullurlR(R+theaderstfpturltypeR'tproxyt proxyhostthosttselectortnametmsg((s/usr/lib64/python2.7/urllib.pyR&�s8     cCs(t|�\}}tdd|f�dS(s/Overridable interface to open unknown URL type.s url errorsunknown url typeN(RR2(R5R]R(RSR'((s/usr/lib64/python2.7/urllib.pyRW�scCs,t|�\}}tdd||f�dS(s/Overridable interface to open unknown URL type.s url errorsinvalid proxy for %sN(RR2(R5RaR]R(RSR'((s/usr/lib64/python2.7/urllib.pyRV�sc Cs�tt|��}|jr5||jkr5|j|St|�\}}|dkr�| sf|dkr�yC|j|�}|j�}|j�tt |�d�|fSWq�t k r�q�Xn|j ||�}z�|j�} |r�t |d�} n�ddl } t|�\} } t | p#d�\} } t | p;d�\} } t| pSd�\} } tjj| �d}| j|�\}}|jj|�tj|d�} z�|| f}|jdk r�||j|<nd }d}d }d }d | krt| d �}n|r*||||�nxb|j|�}|dkrLPn|t|�7}| j|�|d7}|r-||||�q-q-Wd| j�XWd|j�X|d kr�||kr�td ||f|��n|S(stretrieve(url) returns (filename, headers) for a local object or (tempfilename, headers) for a remote object.RGitwbi����Ntiiiscontent-lengthsContent-Lengths1retrieval incomplete: got only %i out of %i bytesi (RRQRBRR$RPtinfoRDR RR2R&ttempfileRRR?tpathtsplitexttmkstempR>RHtfdopentinttreadtlentwriteR1(R5R'R+R,R(RSturl1R_thdrsR^ttfpRjtgarbageRktsuffixtfdtresulttbstsizeRptblocknumtblock((s/usr/lib64/python2.7/urllib.pyR*�sj            cCs=ddl}d}d}t|t�rit|�\}}|r`t|�\}}t|�}n|}n�|\}}t|�\}}t|�\} } | }d}| j�dkr�d}n^t| �\}} |r�t|�\}}n|r d| || f}nt |�r|}n|s0t d�n|rZt|�}t j |�j �} nd} |r�t|�}t j |�j �} nd} |j|�} |dk r�| jd|�| jdd �| jd d t|��n| jd |�| r| jd d| �n| r2| jdd| �n|rK| jd|�nx|jD]}| j|�qUW| j|�| j�\}}}| j�}|dkr�|r�|j�nt d�nd|ko�dknr�t||d||�S|dkr|j|||||�S|j||||||�SdS(sUse HTTP protocol.i����Nthttps %s://%s%ss http errors no host giventPOSTs Content-Types!application/x-www-form-urlencodedsContent-Lengths%dtGETsProxy-AuthorizationsBasic %st AuthorizationtHostshttp protocol errorisgot a bad status linei�i,shttp:(s http errors no host given(shttp protocol errorisgot a bad status lineN(thttplibR$t isinstancetstrRRRRtlowert proxy_bypassR2tbase64t b64encodetstriptHTTPt putrequestt putheaderRqR=t endheaderstgetreplytgetfileRDRRt http_error(R5R'R(R�t user_passwdt proxy_passwdRcRdtrealhostR`trestt proxy_authtauththRIterrcodeterrmsgR^R_((s/usr/lib64/python2.7/urllib.pyt open_http$sx                c Cs�d|}t||�rwt||�}|dkrO||||||�} n|||||||�} | rw| Sn|j|||||�S(s�Handle http errors. Derived class can override this, or provide specific handlers named http_error_DDD where DDD is the 3-digit error code.s http_error_%dN(RURXR$thttp_error_default( R5R'R_R�R�R^R(RetmethodRy((s/usr/lib64/python2.7/urllib.pyR�ms  cCs#|j�td|||f�dS(s>Default error handler: close the connection and raise IOError.s http errorN(RDR2(R5R'R_R�R�R^((s/usr/lib64/python2.7/urllib.pyR�|s cCs=ddl}d}d}t|t�rit|�\}}|r`t|�\}}t|�}n|}n�|\}}t|�\}}t|�\} } | }d}| j�dkr�d}nIt| �\}} |r�t|�\}}n|r d| || f}n|st d�n|rEt|�}t j |�j �} nd} |rut|�}t j |�j �} nd} |j |dd|jd |j�} |dk r�| jd |�| jd d �| jd dt|��n| jd|�| r| jdd| �n| r2| jdd| �n|rK| jd|�nx|jD]}| j|�qUW| j|�| j�\}}}| j�}|dkr�|r�|j�nt d�nd|ko�dknr�t||d||�S|dkr|j|||||�S|j||||||�SdS(sUse HTTPS protocol.i����Nthttpss %s://%s%ss https errors no host giveniR9R:Rs Content-Types!application/x-www-form-urlencodedsContent-Lengths%dR�sProxy-AuthorizationsBasic %sR�R�shttp protocol errorsgot a bad status linei�i,shttps:(s https errors no host given(shttp protocol errorisgot a bad status lineN(R�R$R�R�RRRRR�R2R�R�R�tHTTPSR9R:R�R�RqR=R�R�R�RDRRR�(R5R'R(R�R�R�RcRdR�R`R�R�R�R�RIR�R�R^R_((s/usr/lib64/python2.7/urllib.pyt open_https�s|                 cCsut|t�std �n|d dkrd|dd!dkrd|dd!j�dkrd|j|�S|j|�Sd S( s/Use local file or FTP depending on form of URL.s file errors9proxy support for file protocol currently not implementedis//it/i s localhost/N(s file errors9proxy support for file protocol currently not implemented(R�R�R2R�topen_ftpRP(R5R'((s/usr/lib64/python2.7/urllib.pyt open_file�s  < cCsddl}ddl}ddl}yddlm}Wn!tk r[ddlm}nXt|�\}}t|�}ytj |�} Wn.t k r�} t | j | j | j��nX| j} |jj| jdt�} |j|�d} |j|d| p d| | f��}|s�|}|d d krFd |}n#|d d kritd |��ntt|d�||�St|�\}}| r�tj|�t�t�fkr�|}|d d kr�d |}ntt|d�||�St d�dS(sUse local file.i����N(tStringIOtusegmtis6Content-Type: %s Content-Length: %d Last-modified: %s s text/plainiR�sfile://is./sAlocal file url may start with / or file:. Unknown url of type: %sRLslocal file errorsnot on local host(slocal file errorsnot on local host(t mimetypest mimetoolst email.utilst cStringIOR�t ImportErrorRR R?tstatRFR2terrnotstrerrorR+tst_sizetutilst formatdatetst_mtimetTruet guess_typetMessaget ValueErrorRRR&RRYt gethostbynameRR(R5R'R�R�temailR�RcRGt localnametstatsteR{tmodifiedtmtypeR^turlfiletport((s/usr/lib64/python2.7/urllib.pyRP�sD$      !  c Cs�t|t�std�nddl}ddl}yddlm}Wn!tk rjddlm}nXt|�\}}|s�td�nt |�\}}t |�\}}|r�t |�\}} nd} t |�}|p�d}| p�d} tj|�}|s%ddl} | j}n t|�}t|�\}} t |�}|jd�} | d | d} } | r�| d  r�| d } n| r�| d  r�d| d <n|||dj| �f}t|j�tkr,xJ|jj�D]6}||kr�|j|}|j|=|j�q�q�Wny?||jkr`t|| ||| �|j|<n| sod }nd }xM| D]E}t|�\}}|j�d kr||dkr||j�}q|q|W|j|j| |�\}}|j d|�d }d}|r|d|7}n|dk rA|d krA|d|7}n|j!||��}t"||d|�SWn2t#�k r�}td|ft$j%�d�nXdS(sUse FTP protocol.s ftp errors8proxy support for ftp protocol currently not implementedi����N(R�s no host givenRhR�iitDtIRStatAtitdsftp:sContent-Type: %s sContent-Length: %d i(s ftp errors8proxy support for ftp protocol currently not implemented(s ftp errors no host given(R�R�R�R�R�R�(&R�R�R2R�R�R�R�R�RRRRR$RRYR�tftplibtFTP_PORTRoRtsplittjoinRqR0t MAXFTPCACHEtkeysRDt ftpwrapperRR�tuppertretrfileR�R�RRRR[R\(R5R'R�R�R�RcRkR�tusertpasswdR�tattrstdirsRGtkeytktvRStattrtvalueR_tretrlenR�R^Rf((s/usr/lib64/python2.7/urllib.pyR��sx               "   c Cs�t|t�std�nddl}yddlm}Wn!tk r^ddlm}nXy|jdd�\}}Wntk r�td�nX|s�d }n|j d �}|d kr�d ||kr�||d}|| }nd }g}|j dt j dt j t j ����|j d|�|dkrTtj|�}n t|�}|j dt|��|j d �|j |�dj|�}||�} |j| d �} t| | |�S(sUse "data" URL.s data errors9proxy support for data protocol currently not implementedi����N(R�t,is bad data URLstext/plain;charset=US-ASCIIt;it=RhsDate: %ss%a, %d %b %Y %H:%M:%S GMTsContent-type: %sR�sContent-Length: %ds (s data errors9proxy support for data protocol currently not implemented(s data errors bad data URL(R�R�R2R�R�R�R�R�R�trfindRHttimetstrftimetgmtimeR�t decodestringRRqR�R�RR( R5R'R(R�R�RStsemitencodingRftfR^((s/usr/lib64/python2.7/urllib.pyt open_data6s@            N(R7R8t__doc__R$R>t __version__R<R3RERDR-RJR&RWRVR*R�R�R�t _have_sslR�R�RPR�R�(((s/usr/lib64/python2.7/urllib.pyRts*       &  A I  H % >cBs�eZdZd�Zd�Zdd�Zd�Zdd�Zdd�Z dd�Z dd�Z dd �Z dd �Z dd �Zdd �Zdd �Zdd�Zd�ZRS(s?Derived class with handlers for errors we can handle (perhaps).cOs2tj|||�i|_d|_d|_dS(Nii (RR3t auth_cachettriestmaxtries(R5RItkwargs((s/usr/lib64/python2.7/urllib.pyR3gs  cCst||d||�S(s3Default error handling -- don't raise an exception.shttp:(RR(R5R'R_R�R�R^((s/usr/lib64/python2.7/urllib.pyR�msc Cs�|jd7_|jrm|j|jkrmt|d�rE|j}n |j}d|_|||dd|�S|j||||||�}d|_|S(s%Error 302 -- relocated (temporarily).ithttp_error_500ii�s)Internal Server Error: Redirect Recursion(R�R�RUR�R�tredirect_internal( R5R'R_R�R�R^R(tmethRy((s/usr/lib64/python2.7/urllib.pythttp_error_302qs       c Cs�d|kr|d}nd|kr2|d}ndS|j�t|jd||�}|j�}|jd�p�|jd�p�|jd�s�td||d||��n|j|�S( Ntlocationturit:shttp://shttps://sftp://sredirect errors) - Redirection to url '%s' is not allowed(RDRRSR�t startswithR2R&( R5R'R_R�R�R^R(tnewurlt newurl_lower((s/usr/lib64/python2.7/urllib.pyR��s         cCs|j||||||�S(s*Error 301 -- also relocated (permanently).(R�(R5R'R_R�R�R^R(((s/usr/lib64/python2.7/urllib.pythttp_error_301�scCs|j||||||�S(s;Error 303 -- also relocated (essentially identical to 302).(R�(R5R'R_R�R�R^R(((s/usr/lib64/python2.7/urllib.pythttp_error_303�scCsE|dkr(|j||||||�S|j|||||�SdS(s1Error 307 -- relocated, but turn POST into error.N(R$R�R�(R5R'R_R�R�R^R(((s/usr/lib64/python2.7/urllib.pythttp_error_307�s c Cs d|kr+tj||||||�n|d}ddl}|jd|�} | sxtj||||||�n| j�\} } | j�dkr�tj||||||�nd|jd} |dkr�t|| �|| �St|| �|| |�SdS(s_Error 401 -- authentication required. This function supports Basic authentication only.swww-authenticatei����Ns![ ]*([^ ]+)[ ]+realm="([^"]*)"tbasictretry_t _basic_auth( RR�tretmatchtgroupsR�RSR$RX( R5R'R_R�R�R^R(tstuffR�R�tschemetrealmRe((s/usr/lib64/python2.7/urllib.pythttp_error_401�s"    c Cs d|kr+tj||||||�n|d}ddl}|jd|�} | sxtj||||||�n| j�\} } | j�dkr�tj||||||�nd|jd} |dkr�t|| �|| �St|| �|| |�SdS(seError 407 -- proxy authentication required. This function supports Basic authentication only.sproxy-authenticatei����Ns![ ]*([^ ]+)[ ]+realm="([^"]*)"R�t retry_proxy_R�( RR�R�R�R�R�RSR$RX( R5R'R_R�R�R^R(R�R�R�R�RRe((s/usr/lib64/python2.7/urllib.pythttp_error_407�s"    cCs t|�\}}d||}|jd}t|�\}} t| �\} } | jd�d} | | } |j| || �\} } | p�| s�dSt| dd�dt| dd�d| } d| | |jd<|dkr�|j|�S|j||�SdS(Nshttp://R~t@iRKRhR�(RR"Rtfindtget_user_passwdR$RR&(R5R'RR(RcRdR�RaR`Rbt proxyselectorR�R�R�((s/usr/lib64/python2.7/urllib.pytretry_proxy_http_basic_auth�s   .  cCs t|�\}}d||}|jd}t|�\}} t| �\} } | jd�d} | | } |j| || �\} } | p�| s�dSt| dd�dt| dd�d| } d| | |jd<|dkr�|j|�S|j||�SdS(Nshttps://R�RiRKRhR�(RR"RRRR$RR&(R5R'RR(RcRdR�RaR`RbRR�R�R�((s/usr/lib64/python2.7/urllib.pytretry_proxy_https_basic_auth�s   .  c Cs�t|�\}}|jd�d}||}|j|||�\}}|pS|sZdSt|dd�dt|dd�d|}d||} |dkr�|j| �S|j| |�SdS(NRiRKRhR�shttp://(RRRR$RR&( R5R'RR(RcRdR�R�R�R�((s/usr/lib64/python2.7/urllib.pytretry_http_basic_auth�s  .  c Cs�t|�\}}|jd�d}||}|j|||�\}}|pS|sZdSt|dd�dt|dd�d|}d||} |dkr�|j| �S|j| |�SdS(NRiRKRhR�shttps://(RRRR$RR&( R5R'RR(RcRdR�R�R�R�((s/usr/lib64/python2.7/urllib.pytretry_https_basic_auths  .  icCs�|d|j�}||jkrD|r6|j|=qD|j|Sn|j||�\}}|sh|r~||f|j|<n||fS(NR(R�R�tprompt_user_passwd(R5RcRt clear_cacheR�R�R�((s/usr/lib64/python2.7/urllib.pyRs  cCsfddl}y@td||f�}|jd|||f�}||fSWntk raHdSXdS(s#Override this in a GUI environment!i����NsEnter username for %s at %s: s#Enter password for %s in %s at %s: (NN(tgetpasst raw_inputtKeyboardInterruptR$(R5RcRRR�R�((s/usr/lib64/python2.7/urllib.pyR s     N(R7R8R�R3R�R$R�R�R�R�R�RRRR R R RR (((s/usr/lib64/python2.7/urllib.pyRds             cCs"tdkrtjd�antS(s8Return the IP address of the magic hostname 'localhost'.RN(t _localhostR$RYR�(((s/usr/lib64/python2.7/urllib.pyR,s cCs(tdkr$tjtj��antS(s*Return the IP address of the current host.N(t _thishostR$RYR�t gethostname(((s/usr/lib64/python2.7/urllib.pyR4s cCs(tdkr$ddl}|jantS(s1Return the set of errors raised by the FTP class.i����N(t _ftperrorsR$R�t all_errors(R�((s/usr/lib64/python2.7/urllib.pyR<s   cCsytdkruddl}yddlm}Wn!tk rOddlm}nX|j|�d�atjj�ntS(s)Return an empty mimetools.Message object.i����N(R�i( t _noheadersR$R�R�R�R�R�R_RD(R�R�((s/usr/lib64/python2.7/urllib.pyt noheadersEs   R�cBsVeZdZejed�Zd�Zd�Zd�Z d�Z d�Z d�Z RS(s;Class used by open_ftp() for cache of open FTP connections.cCsV||_||_||_||_||_||_d|_||_|j�dS(Ni( R�R�RcR�R�ttimeouttrefcountt keepalivetinit(R5R�R�RcR�R�Rt persistent((s/usr/lib64/python2.7/urllib.pyR3Xs        cCs�ddl}d|_|j�|_|jj|j|j|j�|jj|j |j �x!|j D]}|jj |�qfWdS(Ni����i( R�tbusytFTPtftptconnectRcR�RtloginR�R�R�tcwd(R5R�tdir((s/usr/lib64/python2.7/urllib.pyRes  c Csddl}|j�|dkr1d}d}nd|}d}y|jj|�Wn.|jk r�|j�|jj|�nXd}|r| ry&d|}|jj|�\}}Wq|jk r }t |�d d kr t d |ft j �d �q qXn|s�|jjd�|r�|jj �} zMy|jj|�Wn2|jk r�}t d |ft j �d �nXWd|jj| �Xd |}nd}|jj|�\}}nd|_t|jd�|j�} |jd7_|j�| |fS(Ni����R�R�sTYPE AisTYPE isRETR it550s ftp errorisLIST tLISTRL(R�R�(R�t endtransferRtvoidcmdRRR$t ntransfercmdt error_permR�R2R[R\tpwdR"Rt addclosehooktmakefilet file_closeRRD( R5RGRSR�tcmdtisdirtconnR�treasonR*tftpobj((s/usr/lib64/python2.7/urllib.pyR�nsL        &$   cCsB|js dSd|_y|jj�Wnt�k r=nXdS(Ni(RRtvoidrespR(R5((s/usr/lib64/python2.7/urllib.pyR&�s  cCs)t|_|jdkr%|j�ndS(Ni(tFalseRRt real_close(R5((s/usr/lib64/python2.7/urllib.pyRD�s cCsC|j�|jd8_|jdkr?|j r?|j�ndS(Nii(R&RRR5(R5((s/usr/lib64/python2.7/urllib.pyR-�s cCs6|j�y|jj�Wnt�k r1nXdS(N(R&RRDR(R5((s/usr/lib64/python2.7/urllib.pyR5�s  ( R7R8R�RYt_GLOBAL_DEFAULT_TIMEOUTR�R3RR�R&RDR-R5(((s/usr/lib64/python2.7/urllib.pyR�Us +  taddbasecBs)eZdZd�Zd�Zd�ZRS(s(Base class for addinfo and addclosehook.cCs�||_|jj|_|jj|_t|jd�rK|jj|_nt|jd�ro|jj|_n d�|_t|jd�r�|jj|_t|jd�r�|jj|_q�ndS(Nt readlinestfilenocSsdS(N(R$(((s/usr/lib64/python2.7/urllib.pyt<lambda>�st__iter__tnext(R_RptreadlineRUR8R9R;R<(R5R_((s/usr/lib64/python2.7/urllib.pyR3�s  cCs d|jjt|�|jfS(Ns<%s at %r whose fp = %r>(t __class__R7tidR_(R5((s/usr/lib64/python2.7/urllib.pyt__repr__�s cCsJd|_d|_d|_d|_|jr=|jj�nd|_dS(N(R$RpR=R8R9R_RD(R5((s/usr/lib64/python2.7/urllib.pyRD�s     (R7R8R�R3R@RD(((s/usr/lib64/python2.7/urllib.pyR7�s  R+cBs eZdZd�Zd�ZRS(s*Class to add a close hook to an open file.cGs&tj||�||_||_dS(N(R7R3t closehookthookargs(R5R_RARB((s/usr/lib64/python2.7/urllib.pyR3�s cCs?|jr.|j|j�d|_d|_ntj|�dS(N(RARBR$R7RD(R5((s/usr/lib64/python2.7/urllib.pyRD�s    (R7R8R�R3RD(((s/usr/lib64/python2.7/urllib.pyR+�s taddinfocBs eZdZd�Zd�ZRS(s.class to add an info() method to an open file.cCstj||�||_dS(N(R7R3R^(R5R_R^((s/usr/lib64/python2.7/urllib.pyR3�scCs|jS(N(R^(R5((s/usr/lib64/python2.7/urllib.pyRi�s(R7R8R�R3Ri(((s/usr/lib64/python2.7/urllib.pyRC�s RRcBs5eZdZdd�Zd�Zd�Zd�ZRS(s9class to add info() and geturl() methods to an open file.cCs/tj||�||_||_||_dS(N(R7R3R^R'tcode(R5R_R^R'RD((s/usr/lib64/python2.7/urllib.pyR3�s  cCs|jS(N(R^(R5((s/usr/lib64/python2.7/urllib.pyRi�scCs|jS(N(RD(R5((s/usr/lib64/python2.7/urllib.pytgetcode�scCs|jS(N(R'(R5((s/usr/lib64/python2.7/urllib.pytgeturl�sN(R7R8R�R$R3RiRERF(((s/usr/lib64/python2.7/urllib.pyRR�s    cCsdS(Ni((tx((s/usr/lib64/python2.7/urllib.pyt _is_unicodescCs t|t�S(N(R�tunicode(RG((s/usr/lib64/python2.7/urllib.pyRHscCsTt|�rPy|jd�}WqPtk rLtdt|�d��qPXn|S(stoBytes(u"URL") --> 'URL'.tASCIIsURL s contains non-ASCII characters(RHtencodet UnicodeErrortrepr(R'((s/usr/lib64/python2.7/urllib.pyRQs  cCsi|j�}|d dkrB|ddkrB|dd!j�}n|d dkre|dj�}n|S(s8unwrap('<URL:type://host/path>') --> 'type://host/path'.it<i����t>isURL:(R�(R'((s/usr/lib64/python2.7/urllib.pyR!s   cCsvtdkr*ddl}|jd�antj|�}|rl|jd�}|j�|t|�dfSd|fS(s:splittype('type:opaquestring') --> 'type', 'opaquestring'.i����Ns ^([^/:]+):i(t _typeprogR$R�tcompileR�tgroupR�Rq(R'R�R�R�((s/usr/lib64/python2.7/urllib.pyR*s  cCs�tdkr$tjdtj�antj|�}|r�|jd�}|jd�}|rz|jd� rzd|}n||fSd|fS(s;splithost('//host[:port]/path') --> 'host[:port]', '/path'.s//([^/#?]*)(.*)iiR�N(t _hostprogR$R�RQtDOTALLR�RRR�(R'R�t host_portRk((s/usr/lib64/python2.7/urllib.pyR8s   cCsYtdkr*ddl}|jd�antj|�}|rO|jdd�Sd|fS(sJsplituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.i����Ns ^(.*)@(.*)$ii(t _userprogR$R�RQR�RR(RcR�R�((s/usr/lib64/python2.7/urllib.pyRHs  cCs_tdkr0ddl}|jd|j�antj|�}|rU|jdd�S|dfS(s/splitpasswd('user:passwd') -> 'user', 'passwd'.i����Ns^([^:]*):(.*)$ii(t _passwdprogR$R�RQtSR�RR(R�R�R�((s/usr/lib64/python2.7/urllib.pyRTs  cCsYtdkr*ddl}|jd�antj|�}|rO|jdd�S|dfS(s*splitport('host:port') --> 'host', 'port'.i����Ns^(.*):([0-9]+)$ii(t _portprogR$R�RQR�RR(RcR�R�((s/usr/lib64/python2.7/urllib.pyRas  cCs�tdkr*ddl}|jd�antj|�}|r�|jdd�\}}y"|sltd�nt|�}Wntk r�d}nX||fS||fS(s�Split host and port, returning numeric port. Return given default port if no ':' found; defaults to -1. Return numerical port if a valid number are found after ':'. Return None if ':' but not a valid number.i����Ns ^(.*):(.*)$iis no digits(t _nportprogR$R�RQR�RRR�Ro(RctdefportR�R�R�tnport((s/usr/lib64/python2.7/urllib.pyRms      cCsYtdkr*ddl}|jd�antj|�}|rO|jdd�S|dfS(s/splitquery('/path?query') --> '/path', 'query'.i����Ns^(.*)\?([^?]*)$ii(t _queryprogR$R�RQR�RR(R'R�R�((s/usr/lib64/python2.7/urllib.pyR�s  cCsYtdkr*ddl}|jd�antj|�}|rO|jdd�S|dfS(s)splittag('/path#tag') --> '/path', 'tag'.i����Ns^(.*)#([^#]*)$ii(t_tagprogR$R�RQR�RR(R'R�R�((s/usr/lib64/python2.7/urllib.pyR �s  cCs!|jd�}|d|dfS(sksplitattr('/path;attr1=value1;attr2=value2;...') -> '/path', ['attr1=value1', 'attr2=value2', ...].R�ii(R�(R'twords((s/usr/lib64/python2.7/urllib.pyR�scCsYtdkr*ddl}|jd�antj|�}|rO|jdd�S|dfS(s-splitvalue('attr=value') --> 'attr', 'value'.i����Ns^([^=]*)=(.*)$ii(t _valueprogR$R�RQR�RR(R�R�R�((s/usr/lib64/python2.7/urllib.pyR�s  t0123456789ABCDEFabcdefccs?|]5}tD](}||tt||d��fVq qdS(iN(t_hexdigtchrRo(t.0R�tb((s/usr/lib64/python2.7/urllib.pys <genexpr>�ss([-]+)cCsOt|�r�d|kr|Stj|�}|dg}|j}xUtdt|�d�D];}|tt||��jd��|||d�qZWdj |�S|jd�}t|�dkr�|S|dg}|j}x^|dD]R}y$|t |d �||d�Wq�t k r=|d�||�q�Xq�Wdj |�S(s"unquote('abc%20def') -> 'abc def'.t%iiitlatin1Rh( RHt_asciireR�RHtrangeRqRR�tdecodeR�t _hextochrtKeyError(tstbitstresRHR�titem((s/usr/lib64/python2.7/urllib.pyR�s.    #     cCs|jdd�}t|�S(s%unquote('%7e/abc+def') -> '~/abc def't+t (RTR(Rm((s/usr/lib64/python2.7/urllib.pyR �ssAABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-ii�s%{:02X}R�cCs�|s%|dkr!td��n|S|tf}yt|\}}Wnftk r�tj�}|jg|D]}||f^qn�|j}t|}||ft|<nX|j |�s�|Sdj t ||��S(s quote('abc def') -> 'abc%20def' Each part of a URL, e.g. the path info, the query, etc., has a different set of reserved characters that must be quoted. RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax lists the following reserved characters. reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," Each of these characters is reserved in some component of a URL, but not necessarily in all of them. By default, the quote function is intended for quoting the path section of a URL. Thus, it will not encode '/'. This character is reserved, but in typical usage the quote function is being called on a path where the existing slash characters are used as reserved characters. sNone object cannot be quotedRhN( R$t TypeErrort always_safeR.Rlt _safe_maptcopytupdatet __getitem__trstripR�tmap(RmRKtcachekeytquotertsafe_maptc((s/usr/lib64/python2.7/urllib.pyR�s     &  RhcCs<d|kr/t||d�}|jdd�St||�S(s9Quote the query fragment of a URL; replacing ' ' with '+'RrRq(RRT(RmRK((s/usr/lib64/python2.7/urllib.pyRs ic Cs�t|d�r|j�}nby-t|�rJt|dt� rJt�nWn2tk rtj�\}}}td|�nXg}|s�xc|D]E\}}tt |��}tt |��}|j |d|�q�Wnx|D]\}}tt |��}t|t �r7t|�}|j |d|�q�t |�rst|j dd��}|j |d|�q�yt|�Wn8tk r�tt |��}|j |d|�q�Xx/|D]'}|j |dtt |���q�Wq�Wdj |�S(svEncode a sequence of two-element tuples or dictionary into a URL query string. If any values in the query arg are sequences and doseq is true, each sequence element is converted to a separate parameter. If the query arg is a sequence of two-element tuples, the order of the parameters in the output will match the order of parameters in the input. titemsis1not a valid non-string sequence or mapping objectR�RJRTt&(RURRqR�ttupleRsR[R\RR�RHRHRKR�( tquerytdoseqttytvattbtlR�R�telt((s/usr/lib64/python2.7/urllib.pyR s<        )cCsi}xPtjj�D]?\}}|j�}|r|ddkr|||d <qqWdtjkr{|jdd�n|S(sReturn a dictionary of scheme -> proxy server URL mappings. Scan the environment for variables named <scheme>_proxy; this seems to be the standard convention. If you need a different way, you can pass a proxies dictionary to the [Fancy]URLopener constructor. i����t_proxytREQUEST_METHODR~N(R?tenvironRR�tpopR$(R"ReR�((s/usr/lib64/python2.7/urllib.pytgetproxies_environmentLs  cCs�tjjdd�p'tjjdd�}|dkr:dSt|�\}}g|jd�D]}|j�^q\}x6|D].}|r{|j|�s�|j|�r{dSq{WdS(s�Test if proxies should not be used for a particular host. Checks the environment for a variable named no_proxy, which should be a list of DNS suffixes separated by commas, or '*' for all hosts. tno_proxyRhtNO_PROXYt*iR�i(R?R�R;RR�R�tendswith(RcR�thostonlyR�Rat no_proxy_listRe((s/usr/lib64/python2.7/urllib.pytproxy_bypass_environmentes* ( $tdarwin(t_get_proxy_settingst _get_proxiesc Cs�ddl}ddl}ddlm}t|�\}}d�}t�}d|kri|dritSnd}x'|jdd �D]} | s�q�n|jd| �} | dk r�|dkr�y|j |�}||�}Wq�|j k r�q�q�Xn|| j d ��} | j d �} | dkrMd | j d �j d�d } nt | d �} d | } || ?| | ?kr�tSq�||| �r�tSq�WtS(s� Return True iff this host shouldn't be accessed using a proxy This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. i����N(tfnmatchcSsy|jd�}tt|�}t|�dkrM|ddddgd }n|dd>|dd>B|dd>B|d BS( Nt.iiiiiiii(R�RzRoRq(tipAddrtparts((s/usr/lib64/python2.7/urllib.pytip2num�s R�texclude_simplet exceptionss(\d+(?:\.\d+)*)(/\d+)?iiii ((R�RYR�RR�R�R$R;R�R�RZRRtcountRoR4( RcR�RYR�R�R�R�tproxy_settingsthostIPR�tmtbasetmask((s/usr/lib64/python2.7/urllib.pytproxy_bypass_macosx_sysconf}s@          # cCst�S(s�Return a dictionary of scheme -> proxy server URL mappings. This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. (R�(((s/usr/lib64/python2.7/urllib.pytgetproxies_macosx_sysconf�scCs!t�rt|�St|�SdS(N(R�R�R�(Rc((s/usr/lib64/python2.7/urllib.pyR��s  cCst�pt�S(N(R�R�(((s/usr/lib64/python2.7/urllib.pyR�sc Csmi}yddl}Wntk r*|SXy!|j|jd�}|j|d�d}|rAt|j|d�d�}d|kr�x�|jd�D]Y}|jdd �\}}ddl}|jd |�s�d ||f}n|||<q�WqA|d d kr||d<qAd||d<d||d<d||d<n|j �Wnt t t fk rhnX|S(sxReturn a dictionary of scheme -> proxy server URL mappings. Win32 uses the registry to store proxies. i����Ns;Software\Microsoft\Windows\CurrentVersion\Internet Settingst ProxyEnableit ProxyServerR�R�is ^([^/:]+)://s%s://%sishttp:R~s http://%ss https://%sR�sftp://%sR( t_winregR�tOpenKeytHKEY_CURRENT_USERt QueryValueExR�R�R�R�tCloset WindowsErrorR�Rs( R"R�tinternetSettingst proxyEnablet proxyServertptprotocoltaddressR�((s/usr/lib64/python2.7/urllib.pytgetproxies_registry�s:         cCst�pt�S(s�Return a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. (R�R�(((s/usr/lib64/python2.7/urllib.pyR�sc Cs�yddl}ddl}Wntk r0dSXyK|j|jd�}|j|d�d}t|j|d�d�}Wntk r�dSX| s�| r�dSt|�\}}|g}y/t j |�}||kr�|j |�nWnt j k rnXy/t j |�} | |kr2|j | �nWnt j k rInX|jd�}x�|D]�} | dkr�d|kr�d Sn| jdd �} | jd d �} | jd d�} x*|D]"} |j| | |j�r�d Sq�Wq`WdS(Ni����is;Software\Microsoft\Windows\CurrentVersion\Internet SettingsR�t ProxyOverrideR�s<local>R�is\.R�s.*t?(R�R�R�R�R�R�R�R�RRYR�RHRZtgetfqdnR�RTR�R�( RcR�R�R�R�t proxyOverridetrawHostR�taddrtfqdnttesttval((s/usr/lib64/python2.7/urllib.pytproxy_bypass_registrysT                cCs!t�rt|�St|�SdS(s�Return a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. N(R�R�R�(Rc((s/usr/lib64/python2.7/urllib.pyR�5s  cCs�d}x$td�D]}|t|�}qW|d}tj�}t|�}t|�}tj�}||kr{dGHnt|�GHt|�GHt|�GHt||d�GdGHdS(NRhiisWrong!itsec(RiRcR�RRRMtround(RmR�tt0tqstuqstt1((s/usr/lib64/python2.7/urllib.pyttest1Gs         cCsd|||fGHdS(Ns0Block number: %d, Block size: %d, Total size: %d((R|t blocksizet totalsize((s/usr/lib64/python2.7/urllib.pyR,Ws(hR�tstringRYR?R�R[R�R�turlparseRRt__all__R�R�Ret nturl2pathR R t rourl2pathR$R%RRRtsslR4R�R�R2R1R0RRRRRRRRRRR�R7R+RCRRRIt NameErrorRHRQRRPRRSRRVRRWRRYRRZRR]RR^R RR`RRbtdictRkRQRhRR RtRutziptxrangeR�t bytearrayR�R~tformatR.RRR R�R�tplatformt_scproxyR�R�R�R�R�RR�R�R�R,(((s/usr/lib64/python2.7/urllib.pyt<module>s�               ���    _ "                 45 '  @   ;    . 4