ÿØÿà 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ÿÙ  j\ PUdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZmZmZmZmZmZmZmZmZmZmZmZmZmZddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%erddl&m'Z'dd l(m)Z)dd l*m+Z+m,Z,dd l-m.Z.d Z/e0e1d <e2e3e e)fZ4e#e$e2e$e3e$e e$e)fe1d<de%e2e5fde2fdZ6de2de5fdZ7de2de5fdZ8de2de5fdZ9de2de5fdZ:de2de5fdZ;de2de5fdZde5de#e5e"e5ffdZ?de5de"e#e"e5dffdZ@ d?de5de"e5de"e2de#e5e5ffd ZAde5de2de#e5e2ffd!ZBde5de#e5e"e2ffd"ZCde.deDfd#ZE d@d$e.d%e"eDd&e2ddfd'ZFde eDeDffd(ZGde eDeDffd)ZHde"e eDeDffd*ZIde#eDeDeDffd+ZJd,eDdeDfd-ZKd,eDde eDeeDge0fffd.ZLd/eDde"e#eDeDffd0ZMd1eDdeDfd2ZN dAd3e%e2e.fd4eDdeOfd5ZPe de eDe%eDe#eDeDffffd6ZQd7eDdefd8ZRd9eDd:eDddfd;ZSd:eDddfd<ZTGd=d>ZUy)Bz Utilities.N)Decimal) lru_cache) in_table_a1 in_table_b1 in_table_c3 in_table_c4 in_table_c5 in_table_c6 in_table_c7 in_table_c8 in_table_c9 in_table_c11 in_table_c12in_table_c21_c22 in_table_d1 in_table_d2) TYPE_CHECKINGAnyCallableDictListOptionalTupleTypeUnion)MySQLConnectionAbstract) HexLiteral)DEPRECATED_TLS_CIPHERSUITESDEPRECATED_TLS_VERSIONS) StrOrBytesF__MYSQL_DEBUG__ NUMERIC_TYPESbufreturnc.t|tr|St|t}}|dk(r|dS|dkr0||dd|z zzz }tt j d|dS||dd|z zzz }tt j d|dS)z&Unpacks the given buffer to an integerrrs r4 int2storerCps.  1uE =>> ;;tQ r6c^|dks|dkDr tdtjd|ddS)zb Takes an unsigned integer (3 bytes) and packs it as a bytes-object. Returns string. rz%int3store requires 0 <= i <= 16777215r)r;r>s r4 int3storerG{s5  1uH @AA ;;tQ ! $$r6cX|dks|dkDr tdtjd|S)zb Takes an unsigned integer (4 bytes) and packs it as a bytes-object. Returns string. rz'int4store requires 0 <= i <= 4294967295r)r;r>s r4 int4storerJs.  1uJBCC ;;tQ r6cX|dks|dkDr tdtjd|S)zZ Takes an unsigned integer (8 bytes) and packs it as string. Returns string. rz!int8store requires 0 <= i <= 2^64r+r;r>s r4 int8storerMs0  1u((<== ;;tQ r6c|dks|dkDr td|dkrt}n*|dkrt}n|dkrt}n|dkrt}nt }||S)z Takes an unsigned integers and packs it as a bytes-object. This function uses int1store, int2store, int3store, int4store or int8store depending on the integer value. returns string. rrLz!intstore requires 0 <= i <= 2^64r9rArErI)r<r?rCrGrJrM)r7 formed_strings r4intstorerPs_ 1u((<==Cx! e! h! j! !  r6c|dks|dkDr td|dkrtjd|S|dkrdtjd|zS|d krd tjd |dd zSd tjd|zS)z| Takes an unsigned integer and packs it as bytes, with the information of how much bytes the encoded int takes. rrLzRequires 0 <= i <= 2^64r:rArBrEr)rFr+r;r>s r4lc_intrVs  1u((2333w{{4##EzT1---H}T1-a222 V[[q) ))r6sizec|d|}||d|fS)zi Reads bytes from a buffer. Returns a tuple with buffer less the read bytes, and the bytes. rNr$rWress r4 read_bytesr\s a+C J r6c|ddk(r|dddfSdx}}|d}|dkr|}|d|zd|d|dzfS|dk(rd}n|dk(rd }n|d k(rd }t|d|dz}|||zdzd||dz||zdzfS) u Takes a buffer and reads a length coded string from the start. This is how Length coded strings work If the string is 250 bytes long or smaller, then it looks like this: <-- 1b --> +----------+------------------------- | length | a string goes here +----------+------------------------- If the string is bigger than 250, then it looks like this: <- 1b -><- 2/3/8 -> +------+-----------+------------------------- | type | length | a string goes here +------+-----------+------------------------- if type == ü: length is code in next 2 bytes elif type == ý: length is code in next 3 bytes elif type == þ: length is code in next 8 bytes NULL has a special value. If the buffer starts with û then it's a NULL and we return None as value. Returns a tuple (trucated buffer, bytes). rrRrNrFr*r5)r$r2lsizefsts r4read_lc_stringrfs@ 1v}ABFU a&C czAJL!3q6A:#677 cz   SUQY' (F "$ %s519v~7I'J KKr6.cg}dddd}t|}d}||kr||}|dk(ry|dk(r|jd|d z }nz|d kr(|}|j||d z||d zz|d |zz }nMd} ||}t||d z||d zz}|j||d z|z||z|d zz|d |z|zz }||krt |S#t$rYywxYw) zXReads all length encoded strings from the given buffer Returns a list of bytes r`rFr*)r_rarbrr9NrRrr^)r.appendKeyErrorr5tuple)r$byteslstsizesbuf_lenposfirstr2rds r4read_lc_string_listrps, ')H!! $E#hG C -C C< C< OOD ! 1HC|S1W#'0B CDq6z! !%LE!cAg#'1B!CDC!GeOfuna6P QRq5y6))/ -2 ?    s2C CCendc| | td| |j|}||dzd|d|fS| t||Std#t$r}td|d}~wwxYw)zr Reads a string up until a character or for a given size. Returns a tuple (trucated buffer, string). Nz&read_string() needs either end or sizezend byte not present in bufferrrz.read_string() needs either end or size (weird))r<indexr\)r$rqrWidxerrs r4 read_stringrv/s {t|ABB  H))C.CC!GIAc ++ #t$$ E FF  H=>C G HsA A$ AA$c,t|d|}||d|fS)zMRead an integer from buffer Returns a tuple (truncated buffer, int) rNrcrZs r4read_intrxHs% #a+ C J r6ch|s td|d}|dk(r|dddfS|dkr|ddt|fS|dk(r!|ddtjd|dddfS|d k(r$|d dtjd |dd d zdfS|d k(r!|ddtjd|dddfStd)z Takes a buffer and reads an length code string from the start. Returns a tuple with buffer less the integer and the integer read. z Empty buffer.rrRrNr_rFz>/ * o 0HD 3I9~"A,$$&CaL''-33C8EF3K  1 M 1 Ms A#B??C ci}tjjdd}tjj|r{t |d5}|D]]}|j d}t |dk7r#|dj}|djd jd }|||<_ d d d |S|S#1swY|SxYw) ztParse the contents of /etc/lsb-release file. Returns: A dictionary containing release information. rz lsb-releaserrrr`rrrrNr)rlsb_release_filerrrrrs r4_parse_lsb_releasers Fww||FM: ww~~&' "W 5  JJsO y>Q&l((*!! ++D177<#s !6 M6M6 Ms A#B??C ci}ttjdd5} tjd|}|j tjj}|D]^}|jd}t|dk7r#|d jd d j}|d jd }|||<` ddd|S#t $r YdddywxYw#1swY|SxYw)ztParse the output of the lsb_release command. Returns: A dictionary containing release information. wrr) lsb_releasez-a)stderrN:r`r _r )rrdevnull subprocess check_outputOSErrordecodesysgetfilesystemencoding splitlinesrr.replacerr)rrstdoutlinesrrrrs r4_parse_lsb_release_commandrs F bjj# 0G ,,-B7SF c779:EEGD 3I9~"A,&&sC0668CaL&&t,EF3K  1 M  1 0  1 Ms.C.CBC. C+ C.*C++C..C8ct}|r5|jdd|jdd|jddfSt}|r5|jdd|jdd|jddfSt}|r5|jdd|jd d|jd dfSy ) aNTries to determine the name of the Linux OS distribution name. First tries to get information from ``/etc/os-release`` file. If fails, tries to get the information of ``/etc/lsb-release`` file. And finally the information of ``lsb-release`` command. Returns: A tuple with (`name`, `version`, `codename`) distrib_idr~distrib_releasedistrib_codenamedistributor_idreleasecodenamename version_idversion_codename)r~r~r~)rgetrr)rs r4linux_distributionrs(:';F JJ|R ( JJ(" - JJ)2 .  ( )F JJ' , JJy" % JJz2 &   F JJvr " JJ|R ( JJ)2 .  r6 unicode_strc>|rtj|ddvryy)zGet the readiness direction of the unicode string. We assume that the direction is "L-to-R" if the first character does not indicate the direction is "R-to-L" or an "AL" (Arabic Letter). r)RALR-to-LzL-to-R) unicodedata bidirectional)rs r4_get_unicode_read_directionrs+ {00Q@E r6ct|}|dk(r/t|drt|ds tddtiSdtiS)at 1) The characters in section 5.8 MUST be prohibited. 2) If a string contains any RandALCat character, the string MUST NOT contain any LCat character. 3) If a string contains any RandALCat character, a RandALCat character MUST be the first character of the string, and a RandALCat character MUST be the last character of the string. rrzvInvalid unicode Bidirectional sequence, if the first character is RandALCat, the final charactermust be RandALCat too.z7Bidirectional Characters requirement 2 [StringPrep, d2])rrr<r)rread_dirs r4_get_unicode_direction_rulers]+;7H8KN+ KO0L)  J;WW F{ SSr6normalized_strc httttttt t ttttd } |jt||D]0}|jD]\}}||s|dk7s||fccS2y#t$r}|t|fcYd}~Sd}~wwxYw)aCheck for Prohibited Output according to rfc4013 profile. This profile specifies the following characters as prohibited input: - Non-ASCII space characters [StringPrep, C.1.2] - ASCII control characters [StringPrep, C.2.1] - Non-ASCII control characters [StringPrep, C.2.2] - Private Use characters [StringPrep, C.3] - Non-character code points [StringPrep, C.4] - Surrogate code points [StringPrep, C.5] - Inappropriate for plain text characters [StringPrep, C.6] - Inappropriate for canonical representation characters [StringPrep, C.7] - Change display properties or deprecated characters [StringPrep, C.8] - Tagging characters [StringPrep, C.9] In addition of checking of Bidirectional Characters [StringPrep, Section 6] and the Unassigned Code Points [StringPrep, A.1]. Returns: A tuple with ("probited character", "breaked_rule") ) z4Space characters that contains the ASCII code pointsz&Space characters non-ASCII code pointsz(Unassigned Code Points [StringPrep, A.1]z.Non-ASCII space characters [StringPrep, C.1.2]z,ASCII control characters [StringPrep, C.2.1]z(Private Use characters [StringPrep, C.3]z+Non-character code points [StringPrep, C.4]z'Surrogate code points [StringPrep, C.5]z9Inappropriate for plain text characters [StringPrep, C.6]zGInappropriate for canonical representation characters [StringPrep, C.7]zDChange display properties or deprecated characters [StringPrep, C.8]z$Tagging characters [StringPrep, C.9]Nr)rrrrrrr r r r r updaterr<ritems)rrulesrucharrulefuncs r4"validate_normalized_unicode_stringrs2AM2>4?:F8H4?7B3>EPS^P[0; E( 0@A++-JD$DzdckTz!(  (s3x''(sB B1 B,&B1,B1a_stringc|Dcgc]}t|rdnt|rdn| }}dj|}tjd|}|sy|Scc}w)a(normalizes a unicode string according to rfc4013 Normalization of a unicode string according to rfc4013: The SASLprep profile of the "stringprep" algorithm. Normalization Unicode equivalence is the specification by the Unicode character encoding standard that some sequences of code points represent essentially the same character. This method normalizes using the Normalization Form Compatibility Composition (NFKC), as described in rfc4013 2.2. Returns: Normalized unicode string according to rfc4013. rr~NFKC)rrrr normalize)rr nstr_listnstrs r4normalize_unicode_stringrCsm*DD![->rDH 779 D   .D  Ks#Apayloadrct|tr|St|tr t|St|ts t|j |St|S#t $r}t d|d}~wwxYw)z(Initialize a bytearray from the payload.rzpayload must be a str or bytesN)r,r/r-bytesencodeAttributeErrorr<)rrrus r4init_bytearrayrhs}'9%'3!! gu % HW^^X^>? ? W  H=>C G HsA%% A?. A::A?cddd}tjdk(rtdtjdvrd|d<n6dtjdvrd |d<ntj|d<d tjd |d <|Stj |d<tj d k(rdtjd|d <|Sdjtdd|d <|S)z4Return a dict with the platform arch and OS version.r~)archversionnt64rx86_64r32i386zWindows-rrDarwinzmacOS--r`) rrplatform architecture win32_vermachinesystemmac_verrr)plats r4 get_platformrys=?23ND ww$ 8((*1- -#DL X**,Q/ /!DL#002DL$X%7%7%9!%<$=>Y K  '')V ??  ( &x'7'7'9!'<&=>DO K"hh'9';Aa'@ADO Kr6fullpathc"t|ts td |jdd\}}t j |}t ||}|S#t$rtd|ddttf$r}t||d}~wwxYw)a(Import an object from a fully qualified module path. Args: obj (str): A string representing the fully qualified name of the object. Returns: Object: The imported object. Raises: ValueError: If the object can't be imported. .. versionadded:: 8.0.33 z]'fullpath' should be a str representing the fully qualified name of the object to be imported.rzNo callable named ''N) r,rr<rsplit importlib import_modulegetattrrModuleNotFoundError)r module_str callable_strmoduleobjrus r4 import_objectr s h $ $  ,#+??3#: L((4fl+ J F.xj:;E / 0,C5"+,s6A'B< B  Bcipher_as_ossl tls_versionc|tj|ijvr!d|d}tj|t yy)aIEmits a warning if a deprecated cipher is being utilized. Args: cipher: Must be ingested as OpenSSL name. tls_versions: TLS version to check the cipher against. Raises: DeprecationWarning: If the cipher is flagged as deprecated according to the OSSA cipher list. z$This connection is using TLS cipher [ which is now deprecated and will be removed in a future release of MySQL Connector/Python.N)rrvalueswarningswarnDeprecationWarning)r r warn_msgs r4warn_ciphersuites_deprecatedrsR488bIPPRR2>2BC& &   h 23 Sr6cV|tvr!d|d}tj|tyy)aEmits a warning if a deprecated TLS version is being utilized. Args: tls_versions: TLS version to check. Raises: DeprecationWarning: If the TLS version is flagged as deprecated according to the OSSA cipher list. z%This connection is using TLS version r N)r rrr)r rs r4warn_tls_version_deprecatedrs:--3K=A& &   h 23 .r6c\eZdZdZdeddfdZdedefdZded eddffd Zdefd Z xZ S) GenericWrapperzr8s:      A$M   Q uT#YU T']D"?2Lj%U%xhuos6J0K'L%T G G %G 3-G 5%< G2%suUCZ'8>U>uUHSM%9:>46 6s6EG '  '!)# '>A '  '4S>*DcN(HT#s(^$<."E#sC-0"J S S TSTT#xt ?T:T5UT811 eCHo1h"s"s"L443444(4S4T4&#0#0r6