ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g9@sddlZddlZddlZddlZddlZgdZgdZgdZgdZgdZ gdZ gdZ d Z d Z gd Zd ZiZd dZdZdZddZeefddZeefddZddZGdddeZGdddeZGdddeZGdd d eeZGd!d"d"eeZdd#lmZed$d%Zed&d'Z ed(d)Z!d*e_"d+ej#_"d,ej$_"d-e _"d.e j%_"d/e j&_"d0e j'_"d1e j(_"d2e j$_"d3e!_"e j%j"e!j%_"e j&j"e!j&_"e j'j"e!j'_"d4e!j)_"e j(j"e!j(_"e j$j"e!j$_"eZ*Gd5d$d$eeZ+Gd6d&d&e eZ,Gd7d(d(e!eZ-Gd8d9d9eeZ.Gd:d;d;e eZ/Gdd?Z1e1[1ddBdCZ2dDdEZ3ddFdGZ4dHdIZ5ddJdKZ6dLdMZ7dNdOZ8ddPdQZ9dRdSZ:dTZ;dadWZ?ddZd[Z@dd^d_ZAdd`daZBddbdcZCeDddZEeFeEZGiZHGdedfdfejIZJddhdiZKddjdkZLddldmZMd\d@ddeLfdndoZNdpdqZOdrdsZPdtduZQdvdwZRdaSdxdyZTdzd{ZUdaVd|d}ZWd~dZXddZYddZZddZ[ddZ\da]ddZ^dddZ_dddZ`ddZaddZbddZcddZdddZeddZfddZgddZhdS)N)urlparse urlunparseurljoin urldefragurlsplit urlunsplit urlencodeparse_qs parse_qslquote quote_plusquote_from_bytesunquote unquote_plusunquote_to_bytes DefragResult ParseResult SplitResultDefragResultBytesParseResultBytesSplitResultBytes)ftphttpgophernntpimapwaisfilehttpsshttpmmsprosperortsprtspusftpsvnsvn+sshwswss)rrrrrtelnetrrrr!rr snewsr"r#r$rsyncr&r'r%nfsgitzgit+sshr(r))rrhdlr"rrrr r#r$sipsipsr!r%tel) rr/mailtonewsr*rrr+r0r1) rrrrrr r!rr#r$r0r1) rrr/rrr4rrrr r+rr"zAabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-.z!  )   cCsttdSN) _parse_cacheclear _safe_quotersr=r=+/opt/python39/lib/python3.9/urllib/parse.py clear_cache`sr?asciistrictcCs|Sr9r=)objr=r=r>_nooposrCcCs |||Sr9encode)rBencodingerrorsr=r=r>_encode_resultrsrHcstfdd|DS)Nc3s"|]}|r|ndVqdS)rNdecode.0xrFrGr=r> xz_decode_args..)tuple)argsrFrGr=rNr> _decode_argsvsrScGsVt|dt}|ddD]}|rt|t|krtdq|rH|tfSt|tfS)Nrz$Cannot mix str and non-str arguments) isinstancestr TypeErrorrCrSrH)rR str_inputargr=r=r> _coerce_argszs  rZc@seZdZdZdddZdS)_ResultMixinStrr=r@rAcs|jfdd|DS)Nc3s|]}|VqdSr9rDrKrNr=r>rOrPz)_ResultMixinStr.encode..)_encoded_counterpartselfrFrGr=rNr>rEsz_ResultMixinStr.encodeN)r@rA)__name__ __module__ __qualname__ __slots__rEr=r=r=r>r[sr[c@seZdZdZdddZdS)_ResultMixinBytesr=r@rAcs|jfdd|DS)Nc3s|]}|VqdSr9rIrKrNr=r>rOrPz+_ResultMixinBytes.decode..)_decoded_counterpartr]r=rNr>rJsz_ResultMixinBytes.decodeN)r@rA)r_r`rarbrJr=r=r=r>rcsrcc@sJeZdZdZeddZeddZeddZedd Ze e j Z d S) _NetlocResultMixinBaser=cCs |jdS)Nr _userinfor^r=r=r>usernamesz_NetlocResultMixinBase.usernamecCs |jdS)NrTrfrhr=r=r>passwordsz_NetlocResultMixinBase.passwordcCsD|jd}|sdSt|tr dnd}||\}}}|||S)Nr%%) _hostinforUrV partitionlower)r^hostname separatorpercentzoner=r=r>rps  z_NetlocResultMixinBase.hostnamecCsj|jd}|durfzt|d}Wn&tyFd|}t|dYn0d|kr\dksfntd|S)NrT z+Port could not be cast to integer value as rizPort out of range 0-65535)rmint ValueError)r^portmessager=r=r>rws   z_NetlocResultMixinBase.portN) r_r`rarbpropertyrirjrprw classmethodtypes GenericAlias__class_getitem__r=r=r=r>res    rec@s(eZdZdZeddZeddZdS)_NetlocResultMixinStrr=cCsD|j}|d\}}}|r4|d\}}}|srgsz_NetlocResultMixinStr._userinfocCsl|j}|d\}}}|d\}}}|rL|d\}}}|d\}}}n|d\}}}|sdd}||fS)Nr[]rrr^r_r have_open_br bracketedrprwr=r=r>rmsz_NetlocResultMixinStr._hostinfoNr_r`rarbryrgrmr=r=r=r>r~s  r~c@s(eZdZdZeddZeddZdS)_NetlocResultMixinBytesr=cCsD|j}|d\}}}|r4|d\}}}|srgsz!_NetlocResultMixinBytes._userinfocCsl|j}|d\}}}|d\}}}|rL|d\}}}|d\}}}n|d\}}}|sdd}||fS)Nr[]rrrr=r=r>rmsz!_NetlocResultMixinBytes._hostinfoNrr=r=r=r>rs  r) namedtuplerz url fragmentrz!scheme netloc path query fragmentrz(scheme netloc path params query fragmentz DefragResult(url, fragment) A 2-tuple that contains the url without fragment identifier and the fragment identifier as a separate argument. z$The URL with no fragment identifier.z Fragment identifier separated from URL, that allows indirect identification of a secondary resource by reference to a primary resource and additional identifying information. z SplitResult(scheme, netloc, path, query, fragment) A 5-tuple that contains the different components of a URL. Similar to ParseResult, but does not split params. z%Specifies URL scheme for the request.z0 Network location where the request is made to. z@ The hierarchical path, such as the path to a file to download. z The query component, that contains non-hierarchical data, that along with data in path component, identifies a resource in the scope of URI's scheme and network location. z Fragment identifier, that allows indirect identification of a secondary resource by reference to a primary resource and additional identifying information. zq ParseResult(scheme, netloc, path, params, query, fragment) A 6-tuple that contains components of a parsed URL. z Parameters for last path element used to dereference the URI in order to provide access to perform some operation on the resource. c@seZdZdZddZdS)rr=cCs |jr|jd|jS|jSdSN#fragmenturlrhr=r=r>geturlKszDefragResult.geturlNr_r`rarbrr=r=r=r>rIsc@seZdZdZddZdS)rr=cCst|Sr9rrhr=r=r>rSszSplitResult.geturlNrr=r=r=r>rQsc@seZdZdZddZdS)rr=cCst|Sr9rrhr=r=r>rXszParseResult.geturlNrr=r=r=r>rVsc@seZdZdZddZdS)rr=cCs |jr|jd|jS|jSdS)N#rrhr=r=r>r^szDefragResultBytes.geturlNrr=r=r=r>r\src@seZdZdZddZdS)rr=cCst|Sr9rrhr=r=r>rfszSplitResultBytes.geturlNrr=r=r=r>rdsrc@seZdZdZddZdS)rr=cCst|Sr9rrhr=r=r>rkszParseResultBytes.geturlNrr=r=r=r>risrcCs4ttfttfttff}|D]\}}||_||_qdSr9)rrrrrrr\rd)Z _result_pairsZ_decodedZ_encodedr=r=r>_fix_result_transcodingos rrTc Csft||\}}}t|||}|\}}}}}|tvrHd|vrHt|\}}nd}t||||||} || S)N;r)rZr uses_params _splitparamsr) rschemeallow_fragments_coerce_result splitresultrqueryrparamsresultr=r=r>r|s rcCsRd|vr,|d|d}|dkr6|dfSn |d}|d|||ddfS)N/rrrrT)findrfind)rir=r=r>rs   rcCsHt|}dD]"}|||}|dkr t||}q |||||dfS)Nz/?#r)lenrmin)rstartdelimcwdelimr=r=r> _splitnetlocs   rcCs|r |rdSddl}|dd}|dd}|dd}|dd}|d|}||kr`dSdD] }||vrdtd |d d qddS) Nrrrrr?NFKCz/?#@:znetloc 'z' contains invalid z#characters under NFKC normalization)isascii unicodedatareplace normalizerv)rrnnetloc2rr=r=r> _checknetlocs       rc Cst||\}}}|t}|t}tD]}||d}||d}q(t|}|||t|t|f}t |d}|r|||St tt krt d}}} | d} | dkr|d| D]} | tvrqq|d| || dd}}|dddkrrsH       " rcCs<t|\}}}}}}}|r&d||f}|t|||||fS)Nz%s;%s)rZr) componentsrrrrrrrr=r=r>rs  rcCst|\}}}}}}|s4|r`|tvr`|dddkr`|rP|dddkrPd|}d|pXd|}|rp|d|}|r|d|}|r|d|}||S) NrrrTrrrrr)rZ uses_netloc)rrrrrrrr=r=r>rs    rc Cs|s|S|s|St||\}}}t|d|\}}}}}} t|||\} } } } }}| |ks`| tvrh||S| tvr| r|t| | | | ||fS|} | s| s|} |} |s|}|t| | | | ||fS|d}|ddkr|d=| dddkr| d}n(|| d}td|dd|dd<g}|D]N}|dkrZz |WntyVYn0n|dkrjq(n | |q(|ddvr| d|t| | d |pd| ||fS)NrrrT...)rr) rZr uses_relativerrrfilterpop IndexErrorappendjoin)baserrrbschemebnetlocbpathbparamsbquery bfragmentrrpathrrr base_partssegments resolved_pathsegr=r=r>rsb            rc CsTt|\}}d|vr>t|\}}}}}}t|||||df}nd}|}|t||S)Nrr)rZrrr) rrsrpaqfragdefragr=r=r>r]s r0123456789ABCDEFabcdefc Cs|s|jdSt|tr"|d}|d}t|dkr<|S|dg}|j}tdurbddtDa|ddD]P}z(|t|dd||ddWqnty|d||Yqn0qnd |S) NrPutf-8rlrTrcSs.i|]&}tD]}||t||q qSr=)_hexdigrEbytesfromhex)rLrrr=r=r> s z$unquote_to_bytes..r) rrUrVrErr _hextobyterKeyErrorr)stringbitsresritemr=r=r>rps,      rz([-]+)rrcCst|trt|||Sd|vr,|j|S|dur8d}|durDd}t|}|dg}|j}tdt|dD],}|t|||||||dqnd |S)NrkrrrrTrr) rUrrrJr_asciirerrangerr)rrFrGrrrrr=r=r>rs   rF&c CsNi}t|||||||d}|D]*\} } | |vr>|| | q| g|| <q|S)N)rFrGmax_num_fieldsrq)r r) qskeep_blank_valuesstrict_parsingrFrGrrq parsed_resultpairsnamevaluer=r=r>r s  r cCs.t|\}}t|\}}|r*t|ttfs2td|durXd||} || krXtddd||D} g} | D]} | s|sqt| dd} t| dkr|rtd| f|rt| d nqtt| ds|rt| d  d d }t |||d }||}| d d d }t |||d }||}| ||fqt| S)Nz*Separator must be of type string or bytes.rTzMax number of fields exceededcSsg|]}|qSr=r=)rLs1r=r=r> rPzparse_qsl..=rzbad query field: %rrr+ rN) rZrUrVrrvcountrrrrr)rrrrFrGrrqrr num_fieldsrr name_valuenvrrr=r=r>r s:     r cCs|dd}t|||S)Nrr)rr)rrFrGr=r=r>rs rsBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-~c@s$eZdZddZddZddZdS)QuotercCst||_dSr9) _ALWAYS_SAFEunionsafe)r^rr=r=r>__init__1szQuoter.__init__cCsd|jjt|fS)Nz<%s %r>) __class__r_dictrhr=r=r>__repr__5szQuoter.__repr__cCs(||jvrt|nd|}|||<|S)Nz%{:02X})rchrformat)r^rrr=r=r> __missing__9szQuoter.__missing__N)r_r`rarrrr=r=r=r>r )sr rcCsbt|tr8|s|S|durd}|dur*d}|||}n |durHtd|durXtdt||S)NrrAz,quote() doesn't support 'encoding' for bytesz*quote() doesn't support 'errors' for bytes)rUrVrErWr )rrrFrGr=r=r>r ?s' r cCsdt|trd|vs$t|tr2d|vr2t||||St|trBd}nd}t|||||}|ddS)Nr r)rUrVrr r)rrrFrGspacer=r=r>r us r cst|ttfstd|sdSt|tr6|dd}ntdd|D}|t|s^|Sz t |Wn$t yt |j t |<Yn0d fdd|DS)Nz!quote_from_bytes() expected bytesrr@ignorecSsg|]}|dkr|qS)r=)rLrr=r=r>rrPz$quote_from_bytes..csg|] }|qSr=r=)rLcharquoterr=r>rrP)rUr bytearrayrWrVrErstrip_ALWAYS_SAFE_BYTESrJr<rr  __getitem__r)bsrr=rr>r s   r c Cst|dr|}nNzt|r0t|dts0tWn.ty`t\}}}td|Yn0g} |s|D]j\} } t| t r|| |} n|t | |||} t| t r|| |} n|t | |||} | | d| qnn |D]\} } t| t r|| |} n|t | |||} t| t r@|| |} | | d| qt| t rn|| |||} | | d| qz t| } Wn8ty|t | |||} | | d| Yq0| D]B} t| t r|| |} n|t | |||} | | d| qqd | S)Nitemsrz1not a valid non-string sequence or mapping objectrr) hasattrr$rrUrQrWsysexc_infowith_tracebackrrVrr)rdoseqrrFrG quote_viatyvatblkrrMeltr=r=r>rsR                 rcCstjdtddt|S)Nz/urllib.parse.to_bytes() is deprecated as of 3.8r stacklevel)warningswarnDeprecationWarning _to_bytesrr=r=r>to_bytessr8cCsHt|trDz|d}Wn&tyBtdt|dYn0|S)NASCIIzURL z contains non-ASCII characters)rUrVrErJ UnicodeErrorreprr7r=r=r>r6s    r6cCs`t|}|dddkr<|dddkr<|dd}|dddkr\|dd}|S)NrTzURL:)rVrr7r=r=r>unwraps   r?cCstjdtddt|S)NzUurllib.parse.splittype() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splittyper7r=r=r> splittypesrAcCsDtdurtdtjat|}|r<|\}}||fSd|fS)Nz ([^/:]+):(.*)) _typeprogrecompileDOTALLmatchgroupsro)rrFrdatar=r=r>r@s   r@cCstjdtddt|S)NzUurllib.parse.splithost() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splithostr7r=r=r> splithost#srJcCsXtdurtdtjat|}|rP|\}}|rH|ddkrHd|}||fSd|fS)Nz//([^/#?]*)(.*)rr) _hostprogrCrDrErFrG)rrF host_portrr=r=r>rI+s  rIcCstjdtddt|S)NzUurllib.parse.splituser() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splituserhostr=r=r> splituser:srPcCs |d\}}}|r|nd|fS)Nrr)rOuserrr=r=r>rMAsrMcCstjdtddt|S)NzWurllib.parse.splitpasswd() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splitpasswd)rRr=r=r> splitpasswdGsrTcCs |d\}}}||r|ndfSNrrn)rRrpasswdr=r=r>rSNsrScCstjdtddt|S)NzUurllib.parse.splitport() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splitportrNr=r=r> splitportTsrYcCsDtdurtdtjat|}|r<|\}}|r<||fS|dfS)Nz (.*):([0-9]*)) _portprogrCrDrE fullmatchrG)rOrFrwr=r=r>rX]s  rXrcCstjdtddt||S)NzVurllib.parse.splitnport() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splitnport)rOdefportr=r=r> splitnportksr^cCsR|d\}}}|s|}n0|rJz t|}Wnty@d}Yn0||fS||fSrU)rrurv)rOr]rrwnportr=r=r>r\rs   r\cCstjdtddt|S)NzVurllib.parse.splitquery() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splitqueryr7r=r=r> splitquerysracCs$|d\}}}|r||fS|dfS)NrrQ)rrrrr=r=r>r`sr`cCstjdtddt|S)NzTurllib.parse.splittag() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splittagr7r=r=r>splittagsrccCs$|d\}}}|r||fS|dfSrrQ)rrrtagr=r=r>rbsrbcCstjdtddt|S)NzUurllib.parse.splitattr() is deprecated as of 3.8, use urllib.parse.urlparse() insteadrr1)r3r4r5 _splitattrr7r=r=r> splitattrsrfcCs|d}|d|ddfS)NrrrT)r)rwordsr=r=r>res recCstjdtddt|S)NzWurllib.parse.splitvalue() is deprecated as of 3.8, use urllib.parse.parse_qsl() insteadrr1)r3r4r5 _splitvalue)attrr=r=r> splitvaluesrjcCs |d\}}}||r|ndfS)NrrV)rirrr=r=r>rhsrh)rT)r)rT)T)rr)FFrrNr)FFrrNr)rr)rNN)rNN)r)r)r)irCr&r{ collectionsr3__all__rrrnon_hierarchical uses_query uses_fragmentrrrrr:r?_implicit_encoding_implicit_errorsrCrHrSrZobjectr[rcrer~rr_DefragResultBase_SplitResultBase_ParseResultBase__doc__rrrrrrr ResultBaserrrrrrrrrrrrrrrrrrrrDrrr r r frozensetrrr!r< defaultdictr r r r rr8r6r?rArBr@rJrKrIrPrMrTrSrYrZrXr^r\rar`rcrbrfrerjrhr=r=r=r>"s    '           =  E   * C  6   Q