ÿØÿà 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 3g#,@sgdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl mZdZdaddZee jjZdZdd Zd Zd d Zgd ZgdZgZeD]ZeeqddddZ deddZ!dddddZ"e#dej$Z%ddZ&ddZ'e#dej$Z(e#dej)ej$BZ*e#dej+ej$BZ,ddZ-e#dej+ej$BZ.dd Z/d!d"Z0e#d#Z1e#d$Z2e#d%Z3e#d&Z4d'd(Z5e#d)Z6d*d+Z7d,d-Z8d.d/Z9e#d0ej$Z:d1d2Z;d3d4Ze#d9ej$Z?d:d;Z@dd?ZBd@dAZCdBZDe#dCZEdDdEZFdFdGZGdHdIZHdJdKZIGdLdMdMZJGdNdOdOZKGdPdQdQeKZLdRdSZMdTdUZNGdVdWdWZOGdXdYdYZPGdZd[d[eQZRGd\d]d]ePZSd^d_ZTGd`dadaeSZUGdbdcdceSZVdS)f)Cookie CookieJar CookiePolicyDefaultCookiePolicy FileCookieJar LWPCookieJar LoadErrorMozillaCookieJarN)timegmFcGs(tsdStsddl}|datj|S)Nr zhttp.cookiejar)debugloggerlogging getLogger)argsr r-/opt/python39/lib/python3.9/http/cookiejar.py_debug,s  rzQa filename was not supplied (nor was the CookieJar instance initialised with one)cCsJddl}ddl}ddl}|}|d||}|jd|dddS)Nr zhttp.cookiejar bug! %s) stacklevel)iowarnings tracebackStringIO print_excgetvaluewarn)rrrfmsgrrr_warn_unhandled_exception:s  ricCs|dd\}}}}}}|tkrd|kr4dkrnnhd|krLdkrnnPd|krddkrnn8d|kr|dkrnn d|krdkrnnt|SdSdS) N r ;=) EPOCH_YEARr )ttyearmonthZmdayhourminsecrrr_timegmIs 8   r-)ZMonZTueZWedZThuZFriZSatZSun) ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs@|durtj}n tj|}d|j|j|j|j|j|jfS)Nz%04d-%02d-%02d %02d:%02d:%02dZ) datetimeutcnowutcfromtimestampr(r)dayr*minutesecondtZdtrrr time2isozWs   r6cCsR|durtj}n tj|}dt||jt|jd|j|j |j |j fS)Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr ) r.r/r0DAYSZweekdayr1MONTHSr)r(r*r2r3r4rrr time2netscapejs   r9)ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$cCsjd}|tvrd}nTt|}|rfdt|d}|drR|dt|d}|ddkrf| }|S)Nr ir<r -) UTC_ZONES TIMEZONE_REsearchintgroup)tzoffsetmrrroffset_from_tz_strings  rGc Cst|}|tjkrdSzt|d}WnZtyz t|}Wnty\YYdS0d|krrdkr|nn|}nYdSYn0|durd}|durd}|durd}t|}t|}t|}t|}|dkr2ttd}|d} |} ||| }| | } t | dkr2| dkr*|d}n|d}t |||||||f} | dur|dur`d}| }t |} | dur~dS| | } | S)Nr r!r id2r:) rBr.ZMAXYEAR MONTHS_LOWERindexlower ValueErrortime localtimeabsr-upperrG) r1monyrhrr+r,rDZimonZcur_yrrFtmpr5rErrr _str2timesN              rVzV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a^ (\d\d?) # day (?:\s+|[-\/]) (\w+) # month (?:\s+|[-\/]) (\d+) # year (?: (?:\s+|:) # separator before clock (\d\d?):(\d\d) # hour:min (?::(\d\d))? # optional seconds )? # optional clock \s* (?: ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone \s* )? (?: \(\w+\) # ASCII representation of timezone in parens. \s* )?$c Cst|}|rl|}t|dd}t|d|t|dt|dt|dt|df}t|S| }t d|d}dgd\}}}}}} } t |}|dur|\}}}}}} } ndSt |||||| | S) Nr rr r<)STRICT_DATE_RErAgroupsrJrKrLrBfloatr-lstrip WEEKDAY_REsubLOOSE_HTTP_DATE_RErV) textrFgrRr'r1rSrTr+r,rDrrr http2times   rda^ (\d{4}) # year [-\/]? (\d\d?) # numerical month [-\/]? (\d\d?) # day (?: (?:\s+|[-:Tt]) # separator before clock (\d\d?):?(\d\d) # hour:min (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* (?: ([-+]?\d\d?:?(:?\d\d)? |Z|z) # timezone (Z is "zero meridian", i.e. GMT) \s* )?$c Csd|}dgd\}}}}}}}t|}|durL|\}}}}}}}} ndSt|||||||S)NrZ)r^ ISO_DATE_RErAr\rV) rbr1rRrSrTr+r,rDrF_rrriso2time+s  rgcCs*|d\}}|jd||j|dS)Nr )spanstring)matchstartendrrr unmatchedLsrmz^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c Csg}|D]}|}g}|rt|}|rt|}|d}t|}|rft|}|d}td|}n.t|}|rt|}|d}|}nd}| ||fq| dr| dd}|r| |g}qt dd|\}} |}q|r| |q|S)Nr z\1,z^[=\s;]*rY)HEADER_TOKEN_RErArmrCHEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr`HEADER_VALUE_RErstripappendr^ startswithresubn) Z header_valuesresultrbZ orig_textpairsrFnamevalueZnon_junkZ nr_junk_charsrrrsplit_header_wordsUs:.       r|([\"\\])cCs|g}|D]h}g}|D]F\}}|durPtd|sDtd|}d|}d||f}||q|r|d|qd|S)Nz^\w+$\\\1z"%s"%s=%s; , )rvrAHEADER_JOIN_ESCAPE_REr`rtjoin)Zlistsheadersryattrkvrrrjoin_header_wordss      rcCs0|dr|dd}|dr,|dd}|S)N"r )ruendswithrbrrr strip_quotess     rc Csd}g}|D]}g}d}t|dD]\}}|}|d\}} } |}|sb|dkr&qnq&| rn| nd} |dkr|} | |vr| }|dkr| durt| } d}n|dkr| durtt| } ||| fq&|r |s|d ||q |S) N)expiresdomainpathsecureversionportmax-ageF;=r rTr)r0) enumeratesplitstrip partitionrLrrdrt) Z ns_headersZ known_attrsrxZ ns_headerry version_setiiZparamkeysepvallcrrrparse_ns_headerss>   rz\.\d+$cCs:t|rdS|dkrdS|ddks2|ddkr6dSdS)NFrYr .rTIPV4_RErArrrris_HDNs rcCsl|}|}||krdSt|s(dS||}|dksB|dkrFdS|dsTdSt|ddshdSdS)NTFrr rr )rLrrfindru)ABirrr domain_matchs  rcCst|rdSdSNFTrrrrrliberal_is_HDNFs rcCs`|}|}t|r t|s0||kr,dSdS|d}|rL||rLdS|s\||kr\dSdS)NTFr)rLrrur)rr initial_dotrrruser_domain_matchPs  rz:\d+$cCsB|}tj|d}|dkr,|dd}td|d}|S)Nr rYZHost) get_full_urlurllibparseurlparseZ get_header cut_port_rer`rL)requesturlhostrrr request_hostes  rcCs4t|}}|ddkr,t|s,|d}||fS)Nrr.local)rfindrrA)rerhnreq_hostrrreff_request_hostus rcCs4|}tj|}t|j}|ds0d|}|S)N/)rrrurlsplit escape_pathrru)rrpartsrrrr request_paths    rcCs^|j}|d}|dkrV||dd}z t|WqZtyRtd|YdS0nt}|S)N:r r znonnumeric port: '%s')rrrBrMrDEFAULT_HTTP_PORT)rrrrrrr request_ports     rz%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])cCsd|dS)Nz%%%sr )rCrQ)rjrrruppercase_escaped_charsrcCstj|t}tt|}|SN)rrquoteHTTP_PATH_SAFEESCAPED_CHAR_REr`r)rrrrrs  rcCsP|d}|dkrL||dd}|d}t|rL|dksD|dkrLd|S|S)Nrr r local)rr)hrbrrrreachs  rcCs$t|}t|t|jsdSdSdSNTF)rrrZorigin_req_host)rrrrris_third_partys rc@sJeZdZdddZddZdddZd d Zdd d Zd dZddZ dS)rFcCs|durt|}| dur$tt| } |dur<|dur)rrrr{rz)rplimitZ namevaluerrr__str__)s  zCookie.__str__cCslg}dD]$}t||}|d|t|fq|dt|j|dt|jd|jjd|fS)N)rrzr{rrrrrrrrrrrrrzrest=%sz rfc2109=%sz%s(%s)r)getattrrtreprrr __class____name__r)rrrzrrrr__repr__3s zCookie.__repr__)F)N)N) r __module__ __qualname__rrrrrrrrrrrrs *   rc@s,eZdZddZddZddZddZd S) rcCs tdSrNotImplementedErrorrcookierrrrset_okKszCookiePolicy.set_okcCs tdSrrrrrr return_okTszCookiePolicy.return_okcCsdSNTr)rrrrrrdomain_return_okXszCookiePolicy.domain_return_okcCsdSrr)rrrrrrpath_return_ok]szCookiePolicy.path_return_okN)rrrrrrrrrrrrBs  rc @seZdZdZdZdZdZeeBZdddddddddedddf d d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6ZdS)7rr rrWr NTF)httpswsscCsv||_||_||_||_||_||_| |_| |_| |_| |_ | |_ |durVt ||_ nd|_ |durlt |}||_ dS)Nr)netscaperfc2965rfc2109_as_netscape hide_cookie2 strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathsecure_protocolstuple_blocked_domains_allowed_domains)rblocked_domainsallowed_domainsrrrrrrrrrrrrrrrms" zDefaultCookiePolicy.__init__cCs|jSr)rrrrrr sz#DefaultCookiePolicy.blocked_domainscCst||_dSr)rr)rr rrrset_blocked_domainssz'DefaultCookiePolicy.set_blocked_domainscCs |jD]}t||rdSqdSr)rr)rrZblocked_domainrrr is_blockeds  zDefaultCookiePolicy.is_blockedcCs|jSr)rr rrrr sz#DefaultCookiePolicy.allowed_domainscCs|durt|}||_dSr)rr)rr rrrset_allowed_domainssz'DefaultCookiePolicy.set_allowed_domainscCs.|jdurdS|jD]}t||rdSqdSr)rr)rrZallowed_domainrrris_not_alloweds    z"DefaultCookiePolicy.is_not_allowedcCs@td|j|jdD]&}d|}t||}|||sdSqdS)N - checking cookie %s=%s)r verifiabilityrzrrrZset_ok_FTrrzr{rrrrnZfn_namefnrrrrs  zDefaultCookiePolicy.set_okcCsZ|jdurtd|j|jdS|jdkr:|js:tddS|jdkrV|jsVtddSdS)Nz0 Set-Cookie2 without version attribute (%s=%s)Fr $ RFC 2965 cookies are switched off$ Netscape cookies are switched offT)rrrzr{rrrrrrset_ok_versions z"DefaultCookiePolicy.set_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdSNr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionTZ unverifiablerrrrrrrrrset_ok_verifiabilitysz(DefaultCookiePolicy.set_ok_verifiabilitycCs0|jdkr,|jr,|jdr,td|jdSdS)Nr $z' illegal name (starts with '$'): '%s'FT)rrrzrurrrrr set_ok_names   zDefaultCookiePolicy.set_ok_namecCsL|jrHt|}|jdks(|jdkrH|jrH||j|sHtd|j|dSdS)Nr z7 path attribute %s is not a prefix of request path %sFT)rrrrrrr)rrrreq_pathrrr set_ok_paths  zDefaultCookiePolicy.set_ok_pathc Cs||jrtd|jdS||jr8td|jdS|jrt|\}}|j}|jr|ddkr|d}|dd|}|dkr||dd}||d|} | dvrt |dkrtd |dS| dr|dd} n|} | ddk} | s|d krtd |dS|j dkrX||sX| dsXd||sXtd ||dS|j dksr|j|j@rt||std ||dS|j dks|j|j@r|dt | } | ddkrt|std| |dSdS)N" domain %s is in user block-listF& domain %s is not in user allow-listrrr r )coZacZcomZeduZorgZnetZgovZmilrBZaeroZbizcatZcoopinfoZjobsZmobiZmuseumrzZproZtraveleuz& country-code second level domain %srz/ non-local domain %s contains no embedded dotzO effective request-host %s (even with added initial dot) does not end with %sz5 effective request-host %s does not domain-match %sz. host prefix %s for domain %s contains a dotT)r rrrrrrcountrrLlenrurrrrDomainRFC2965MatchrDomainStrictNoDotsrrA) rrrrrrrjZtldZsldZundotted_domainZ embedded_dotsZ host_prefixrrr set_ok_domainsv                  z!DefaultCookiePolicy.set_ok_domainc Cs|jrt|}|durd}nt|}|jdD]>}z t|Wn ty`td|YdS0||kr0qq0td||jdSdS)N80rnz bad port %s (not numeric)Fz$ request port (%s) not found in %sT)rrstrrrrBrMrrrrZreq_portrrrr set_ok_port+s$    zDefaultCookiePolicy.set_ok_portcCs@td|j|jdD]&}d|}t||}|||sdSqdS)Nr)rrrrrrZ return_ok_FTrrrrrr@s   zDefaultCookiePolicy.return_okcCs<|jdkr|jstddS|jdkr8|js8tddSdS)Nr rFrT)rrrrrrrrreturn_ok_versionRsz%DefaultCookiePolicy.return_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdSrrrrrrreturn_ok_verifiability[sz+DefaultCookiePolicy.return_ok_verifiabilitycCs"|jr|j|jvrtddSdS)Nz( secure cookie with non-secure requestFT)rtyperrrrrrreturn_ok_securegsz$DefaultCookiePolicy.return_ok_securecCs||jrtddSdS)Nz cookie expiredFT)r_nowrrrrrreturn_ok_expiresms z%DefaultCookiePolicy.return_ok_expirescCsN|jrJt|}|durd}|jdD]}||kr&qJq&td||jdSdS)Nr,rnz0 request port %s does not match cookie port %sFT)rrrrr.rrrreturn_ok_portssz"DefaultCookiePolicy.return_ok_portcCst|\}}|j}|r*|ds*d|}n|}|jdkr^|j|j@r^|js^||kr^tddS|jdkrt||std||dS|jdkrd| |std||dSdS)Nrr zQ cookie with unspecified domain does not string-compare equal to request domainFzQ effective request-host name %s does not domain-match RFC 2965 cookie domain %sz; request-host %s does not match Netscape cookie domain %sT) rrrurrDomainStrictNonDomainrrrr)rrrrrr dotdomainrrrreturn_ok_domains2    z$DefaultCookiePolicy.return_ok_domaincCst|\}}|dsd|}|ds0d|}|rH|dsHd|}n|}||sd||sddS||r|td|dS||rtd|dSdS)NrFr r!T)rrurr rr)rrrrrr8rrrrs"        z$DefaultCookiePolicy.domain_return_okcCsbtd|t|}t|}||kr&dS||rR|dsN|||ddkrRdStd||dS)Nz- checking cookie path=%sTrr z %s does not path-match %sF)rrr'rur)rrrrpathlenrrrrs   z"DefaultCookiePolicy.path_return_ok)rrrr)r7r(Z DomainLiberalZ DomainStrictrr r r r rrrrrrrr+r/rr0r1r3r5r6r9rrrrrrrcsN #   ;  rcCst|}t|j|Sr)sortedkeysmapr)Zadictr<rrrvals_sorted_by_keys r>c csTt|}|D]B}d}z |jWnty0Yn0d}t|EdH|s |Vq dSr)r>itemsAttributeError deepvalues)mappingvaluesobjrrrrAs  rAc@s eZdZdS)AbsentNrrrrrrrrErEc@seZdZedZedZedZedZedZ edej Z d2dd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd3d$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)4rz\Wr}z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)NcCs(|durt}||_t|_i|_dSr)r_policy _threadingRLock _cookies_lock_cookiesrpolicyrrrrs  zCookieJar.__init__cCs ||_dSr)rHrMrrr set_policyszCookieJar.set_policycCsg}|j||sgStd||j|}|D]T}|j||sFq2||}|D].}|j||srtdqVtd||qVq2|S)Nz!Checking %s for cookies to returnz not returning cookiez it's a match) rHrrrLr<rrCrrt)rrrcookiesZcookies_by_pathrZcookies_by_namerrrr_cookies_for_domains     zCookieJar._cookies_for_domaincCs*g}|jD]}||||q|Sr)rLr<extendrQ)rrrPrrrr_cookies_for_requestszCookieJar._cookies_for_requestc Cs<|jddddd}g}|D]}|j}|sHd}|dkrH|d||jdurz|j|jrz|dkrz|jd|j}n|j}|jdur||jn|d |j|f|dkr|j r|d |j |j d r|j }|j s| d r|d d}|d ||jdurd}|jr,|d|j}||q|S)NcSs t|jSr)r'r)arrrrGz)CookieJar._cookie_attrs..T)rreverseFr z $Version=%sr~rz $Path="%s"rr z $Domain="%s"z$Portz="%s")sortrrtr{ non_word_rerAquote_rer`rzrrrrurrr) rrPrattrsrrr{rrrrr _cookie_attrssF        zCookieJar._cookie_attrscCstd|jztt|j_|_||}||}|r^| ds^| dd ||jj r|jj s| ds|D]}|jdkr|| ddqq|W|jn |j0|dS)Nadd_cookie_headerrrZCookie2r z $Version="1")rrKacquirerBrNrHr4rSr[Z has_headerZadd_unredirected_headerrrrrreleaseclear_expired_cookies)rrrPrZrrrrr\Is(       zCookieJar.add_cookie_headerc Csg}d}d}|D]x}|d\}}d}d} i} i} |ddD].\} } | }||vs`||vrd|} | |vrx| durxd} | | vrq>| dkr| durtdd} qp| } | d kr|rq>| durtd q>| d krd}z t| } Wn(tytd d} YqpYn0d } |j| } | |vs2| |vrf| dur\| d vr\td| d} qp| | | <q>| | | <q>| rxq|||| | fq|S)N)rr)rrrrrrr commenturlr Fr Trz% missing value for domain attributerzM missing or invalid value for expires attribute: treating as session cookierz? missing or invalid (non-numeric) value for max-age attribute)rrr`z! missing value for %s attribute)rLrrBrMr4rt)r attrs_set cookie_tuples boolean_attrs value_attrsZ cookie_attrsrzr{Z max_age_setZ bad_cookiestandardrrrrrrr_normalized_cookie_tuplesjsh          z#CookieJar._normalized_cookie_tuplescCs"|\}}}}|dt}|dt}|dt} |dt} |dd} | durrz t| } WntypYdS0|dd} |dd} |d d}|d d}|tur|d krd }t|}nXd}t|}|d }|dkr| dkr|d|}n|d|d}t|dkrd }|tu}d}|r8t| d}|turTt |\}}|}n| dshd|}d}| tur| durt |} nd }t dd | } nd} | turd} d } nF| |jkrz||||WntyYn0td|||dSt| ||| ||||||| | | |||S)NrrrrrrFrrr`rYTrrr r rz\s+z2Expiring cookie, domain='%s', path='%s', name='%s')rrErBrMrrrr'boolrurrrvr`r4clearKeyErrorrr)rtuprrzr{rerrrrrrrrrrrrrrrrrrrr_cookie_from_cookie_tuples                       z#CookieJar._cookie_from_cookie_tuplecCs6||}g}|D]}|||}|r||q|Sr)rfrkrt)rrarrbrPrjrrrr_cookies_from_attrs_set's   z!CookieJar._cookies_from_attrs_setcCsHt|jdd}|dur |jj }|D]}|jdkr$d|_|r$d|_q$dS)Nrr Tr )rrHrrr)rrPZ rfc2109_as_nsrrrr_process_rfc2109_cookies0s  z"CookieJar._process_rfc2109_cookiesc Cs6|}|dg}|dg}tt|j_|_|jj}|jj}|sN|rf|sV|rf|s^|rf|sj|sjgSz|t ||}Wnt yt g}Yn0|r2|r2z|t ||} Wnt yt g} Yn0| | |r"i} |D]} d| | j| j| jf<q| fdd} t| | } | r2|| |S)Nz Set-Cookie2z Set-CookiecSs|j|j|jf}||vSr)rrrz)Z ns_cookielookuprrrrno_matching_rfc2965isz3CookieJar.make_cookies..no_matching_rfc2965)r$Zget_allrBrNrHr4rrrlr| ExceptionrrrmrrrzfilterrR) rresponserrZ rfc2965_hdrsZns_hdrsrrrPZ ns_cookiesrnrrorrr make_cookies<sZ           zCookieJar.make_cookiescCsX|jz|durX|durJtd|j||=n|durj|j|=ni|_dS)Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rMrL)rrrrzrrrrhs  zCookieJar.clearcCsN|jz2|D]}|jr||j|j|jqW|jn |j0dSr)rKr]rrhrrrzr^)rrrrrclear_session_cookiess  zCookieJar.clear_session_cookiescCsZ|jz>t}|D]"}||r||j|j|jqW|jn |j0dSr) rKr]rNrrhrrrzr^)rrrrrrr_s  zCookieJar.clear_expired_cookiescCs t|jSr)rArLr rrr__iter__szCookieJar.__iter__cCsd}|D] }|d}q|S)Nr r r)rrrrrr__len__szCookieJar.__len__cCs2g}|D]}|t|qd|jjd|fSNz<%s[%s]>r)rtrrrrrrrrrrrszCookieJar.__repr__cCs2g}|D]}|t|qd|jjd|fSr|)rtr-rrrr}rrrrszCookieJar.__str__)N)NNN)!rrrrvcompilerXrYZstrict_domain_reZ domain_reZdots_reASCIImagic_rerrOrQrSr[r\rfrkrlrmrsrurtrxrhryr_rzr{rrrrrrrs6      ;!a\  7   rc@s eZdZdS)rNrFrrrrrrGrc@s4eZdZd ddZd ddZd ddZdd d ZdS)rNFcCs2t|||durt|}||_t||_dSr)rrosfspathfilenamerg delayload)rrrrNrrrrs   zFileCookieJar.__init__cCs tdSrr)rrignore_discardignore_expiresrrrsaveszFileCookieJar.savecCs^|dur"|jdur|j}nttt| }|||||Wdn1sP0YdSr)rrMMISSING_FILENAME_TEXTopen _really_loadrrrrrrrrloads  zFileCookieJar.loadcCs|dur"|jdur|j}ntt|jzNt|j}i|_z||||Wnt yl||_Yn0W|j n |j 0dSr) rrMrrKr]rdeepcopyrLrOSErrorr^)rrrrZ old_staterrrrevert s    zFileCookieJar.revert)NFN)NFF)NFF)NFF)rrrrrrrrrrrrs   rcCs |j|jfd|jfd|jfg}|jdur8|d|jf|jrH|d|jrX|d|jrh|d|j rx|d|j r|dt t |j f|j r|d |jr|d |jf|jr|d |jft|j}|D]}||t|j|fq|d t|jft|gS) Nrrr) path_specN) port_specN) domain_dotN)rNr)rNrr`r)rzr{rrrrtrrrrrr6r]rrrr;rr<r-rr)rrr<rrrrlwp_cookie_str$s(   rc@s(eZdZd ddZd ddZdd ZdS) rTcCsTt}g}|D]2}|s |jr q|s0||r0q|dt|qd|dgS)NzSet-Cookie3: %s rY)rNrrrtrr)rrrrr~rrrr as_lwp_strMs zLWPCookieJar.as_lwp_strNFcCsl|dur"|jdur|j}nttt|d,}|d||||Wdn1s^0YdS)Nwz#LWP-Cookies-2.0 )rrMrrwriterrrrrr]s   zLWPCookieJar.savecCs,|}|j|s$d|}t|t}d}d} d} z|} | dkrPq| |s\q<| t|d} t| gD]f} | d\} }i}i}| D] }d||<q| ddD]n\}}|dur| }nd}|| vs|| vr|}|| vr|durd }|||<q|| vr|||<q|||<q|j }|d }|d }|durJt |}|durXd }|d }|d }t |d| ||d|d|||d|d|d|d|||d|d|}|s|j rqz|s||rqz||qzqtyYn*ty&ttd|| fYn0dS)Nz5%r does not look like a Set-Cookie3 (LWP) format filez Set-Cookie3:)rrrrr)rrrrrrr`rYr Fr Trrrrrrrrrrrrr`z&invalid Set-Cookie3 format file %r: %r)readlinerrArrNrur'rr|rLrrgrrrrtrrpr)rrrrrmagicrrheaderrcrdlinedatarzr{rerrrrrrrrrrvrrrris                    zLWPCookieJar._really_load)TT)NFF)rrrrrrrrrrr@s  rc@s,eZdZedZdZddZd ddZdS) rz#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. cCs^t}|}|j|s(td|z|}|dkr>q|drT|dd}|ds*|dkrpq*|d\}} } } } } }| dk} | dk} | dkr|} d}|d}d }| dkrd} d }t d | |dd || || d | | |ddi}|s|j rq*|s | |r q*| |q*Wn>t y0Yn*tyXttd ||fYn0dS) Nz4%r does not look like a Netscape format cookies filerYrr)#r TRUErFTr z+invalid Netscape format cookies file %r: %r)rNrrrArrrrurrrrrtrrpr)rrrrrrrrrrrrrrzr{rrrvrrrrsf     zMozillaCookieJar._really_loadNFc Cs|dur"|jdur|j}nttt|d}||jt}|D]}|sV|jrVqF|sf||rfqF|j rrd}nd}|j drd}nd}|j durt |j } nd} |jdurd} |j} n |j} |j} |d|j ||j|| | | gdqFWdn1s0YdS)NrrFALSErrYrr)rrMrrrrrNrrrrrurr-r{rzrr) rrrrrrrrrrrzr{rrrr s<       zMozillaCookieJar.save)NFF) rrrrvrrrrrrrrrrs Ar)N)N)W__all__rrr.rvrN urllib.parserZurllib.request threadingrIZ http.clienthttpZcalendarr r r rr-clientZ HTTP_PORTrrrr&r-r7r8rJr)rtrLr6r9r?rrr@rGrVr[Ir_Xrardrergrmrorprrrqr|rrrrrrrrrrrrrrrrrrrrrrrr>rArErrrrrrrrrrrs    8  8 !    U D'    #b!b7x