VULN_CHECK_I913V6 jzddlmZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlmZmZmZm Z dd l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+dd l,m-Z-m.Z.e j^e0Z1da2e3ed rd Z4n2ejjjmd rdZ4nejjdk(rdZ4ndZ4ejndZ8e8sdejrddzZ8de8zZ:e4e8zZ;e+jyddjyddZ=ejndZ>e>r6e>jmdr%e>jyddjddZ>n dZ@e@Z>[@e jde je jzZDe jde je jzZEe jdZFe jdZGd ZHd!ZIe jd"k(rd#ZKnd$ZKejrdd%krddlLZLn dZLddlMZNddlOZNd&ZPd'ZQGd(d)eRZSeSZTGd*d+eRZUd,ZVd-ZWeWZX[Wd/d.ZYy)0)unicode_literalsN)message_from_file) __version__DistlibException) sysconfigZipFilefsdecode text_typefilter)InstalledDistribution)MetadataMETADATA_FILENAMEWHEEL_METADATA_FILENAMELEGACY_METADATA_FILENAME) FileOperator convert_path CSVReader CSVWriterCachecached_propertyget_cache_base read_exportstempdir get_platform)NormalizedVersionUnsupportedVersionErrorpypy_version_infoppjavajycliipcppy_version_nodotz%s%spy-_.SOABIzcpython-cdtg}tjdr|jdtdk(rt j dd}|dkrqtjd}|d}|r|jd|d kr@tjd }|d k(s|$t jd k(r|jd dj|S)Nr$Py_DEBUGdr&) WITH_PYMALLOCTm)r/r/Py_UNICODE_SIZEiu) VER_SUFFIXrget_config_varappend IMP_PREFIXsys version_info maxunicodejoin)partsviwpmuss >/usr/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py _derive_abirD;sz"  # #J / LL   !!"1%BF{..?;CLL%;"112CDBQw2:#..H2L S)wwu~zz (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ z7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons #!pythonw/c|SNos rCrLesrEcB|jtjdS)NrF)replaceosseprJs rCrLrLgs2663/rEr/ctr%tjDcgc]}|d c}StjjScc}w)Nr)imp get_suffixes importlib machineryEXTENSION_SUFFIXES)ss rC _get_suffixesrXps@ !..010!011""5552s Actrtj||Stjj ||}tjj |}|t j|<|jj||SrH) rR load_dynamicrTutilspec_from_file_locationmodule_from_specr;modulesloader exec_module)namepathspecmodules rC _load_dynamicrevsg d++~~55dDA006" D ' rEc,eZdZdZdZdZddZdZy)Mounterc i|_i|_yrH) impure_wheelslibsselfs rC__init__zMounter.__init__s rEcX||j|<|jj|yrH)rirjupdate)rlpathname extensionss rCaddz Mounter.adds$'18$ $rEc|jj|}|D]!\}}||jvs|j|=#yrH)ripoprj)rlrprqkvs rCremovezMounter.removes<''++H5 DAqDII~IIaLrENc.||jvr|}|Sd}|SrH)rj)rlfullnamerbresults rC find_modulezMounter.find_modules& tyy F F rEc |tjvrtj|}|S||jvrtd|zt ||j|}||_|j dd}t|dkDr |d|_|S)Nzunable to find extension for %sr*rr) r;r^rj ImportErrorre __loader__rsplitlen __package__)rlryrzr?s rC load_modulezMounter.load_modules s{{ "[[*F tyy(!"Ch"NOO"8TYYx-@AF $F OOC+E5zA~%*1X" rErH)__name__ __module__ __qualname__rmrrrwr{rrIrErCrgrgs%!  rErgceZdZdZdZdZddZedZedZ edZ e d Z d Z e d Zd Zdd ZdZdZdZddZdZdZdZdZdZdZddZdZdZddZy) Wheelz@ Class to build and install from Wheel files (PEP 427). )rrsha256Nc||_||_d|_tg|_dg|_dg|_tj|_ | d|_ d|_ |j|_ ytj|}|rQ|j!d}|d|_ |dj#d d |_ |d |_|j|_ ytj$j'|\}}t(j|}|st+d |z|r$tj$j-||_ ||_ |j!d}|d|_ |d|_ |d |_|d j'd|_|dj'd|_|dj'd|_y)zB Initialise an instance using a (valid) filename. r6noneanyNdummyz0.1nmvnr)r(bnzInvalid name or filename: %rr'r*biar)sign should_verifybuildverPYVERpyverabiarchrOgetcwddirnameraversionfilename _filenameNAME_VERSION_REmatch groupdictrNrbsplit FILENAME_RErabspath)rlrrverifyr2infors rCrmzWheel.__init__s # W 8G yy{  DI DL!]]DN%%h/A{{2 J #Dz11#s; $T  !%$&GGMM($;!%%h/*,:rrrrrNra)rlrrrrrs rCrzWheel.filenames ==T]]*HH$hhtxx xx ",,&&sC0)-GX).T; ;rEctjj|j|j}tjj |SrH)rOrbr>rrisfile)rlrbs rCexistsz Wheel.existss1ww||DLL$--8ww~~d##rEc#K|jD]+}|jD]}|jD] }|||f -ywrH)rrr)rlrrrs rCtagsz Wheel.tagss=ZZExx IIDd**&  s<>c tjj|j|j}|j d|j }d|z}tjd}t|d5}|j|}|djdd}t|Dcgc] }t|c}} ttg} d} | D]U} t!j|| } |j#| 5}||}t%|} | r dddn dddW| st)d d j| z ddd| Scc}w#1swY:xYw#t&$rYwxYw#1swY SxYw) Nr( %s.dist-infoutf-8r Wheel-Versionr*r)fileobjz8Invalid wheel, because metadata is missing: looked in %sz, )rOrbr>rrrarcodecs getreaderr get_wheel_metadatartupleintrr posixpathopenrKeyError ValueError)rlrpname_verinfo_dirwrapperzfwheel_metadatawvi file_versionfnsrzfnmetadata_filenamebfwfs rCmetadatazWheel.metadatasp77<< dmm<"ii6!H,""7+ Xs #r!44R8N066sA>B "!5"Q#a&"!56L +,DECF(1x(D%!23r$R[!)"!5!! 43"4 "9;?99S>"JKK+$0 +"643  '$0 sf60E1&E 8E1'E":EE"E1E"%!E1E1E E"" E.+E1-E..E11E;c0|jd|j}d|z}tj|d}|j |5}t j d|}t|}dddt|S#1swYtSxYw)Nr(rWHEELr) rarrr>rrrrdict)rlrrrrrrmessages rCrzWheel.get_wheel_metadatas"ii6!H,%NN8W= WW& '2*!!'*2.B'+G(G}(G}s 'BBctjj|j|j}t |d5}|j |}ddd|S#1swYSxYw)Nr)rOrbr>rrr r)rlrprrzs rCrz Wheel.infosO77<< dmm< Xs #r,,R0F$ $ s AA'ctj|}|ru|j}|d|||d}}d|jvrt}nt }t j|}|rd|jdz}nd}||z}||z}|S|jd}|jd} |dks|| kDrd} n|||dzd k(rd } nd} t | z|z}|S) Nspythonw rE  rr&s ) SHEBANG_RErendlowerSHEBANG_PYTHONWSHEBANG_PYTHONSHEBANG_DETAIL_REgroupsfind) rldatar2rshebangdata_after_shebangshebang_pythonargscrlfterms rCprocess_shebangzWheel.process_shebang%s   T " %%'C*.t*d34j'GW]]_,!0!/!''0Aahhjn,$t+G//D 5!B5!BAvb26?g-"D D!D(4/D rEc| |j} tt|}||j }t j|jdjd}||fS#t$rt d|zwxYw)NzUnsupported hash algorithm: %r=ascii) hash_kindgetattrhashlibAttributeErrorrdigestbase64urlsafe_b64encoderstripdecode)rlrrhasherrzs rCget_hashzWheel.get_hashCs  I QWi0F$$&))&188>EEgN&   Q"#Ci#OP P Qs A--Bct|}|j|ddft|5}|D]}|j| dddy#1swYyxYw)Nr6)listr9rwriterow)rlrecords record_patharchive_record_pathwriterrows rC write_recordzWheel.write_recordNsKw-+R45 { #v$$ # #s AAc(g}|\}}tt|j}|D]q\}} t| d5} | j } dddd|j  z} t jj| } |j|| | fst jj|d} tt jj|d}|j|| ||j|| fy#1swYxYw)Nrbz%s=%sRECORD) rrrrreadrrOrbgetsizer9r>to_posixr)rlrlibdir archive_pathsrdistinforrappfrrsizes rC write_recordszWheel.write_recordsUs!($..1"EBa!vvxt}}T22F77??1%D NNB- . # GGLL8 , bggll8X6 7 '1b)b!W%s DD ct|dtj5}|D].\}}tj d|||j ||0 dddy#1swYyxYw)NwzWrote %s to %s in wheel)r zipfile ZIP_DEFLATEDloggerdebugwrite)rlrprrrrs rC build_zipzWheel.build_zipesN XsG$8$8 9R&A 62>B': 9 9s 4AA#c  |i}ttfddd}|dk(rd}tg}tg}tg}nd}t g}dg}d g}|j d ||_|j d ||_|j d ||_ |} |jd |j} d| z} d| z} g} dD]N}|vr |}tjj|s.tj|D]\}}}|D]}t!tjj#||}tjj%||}t'tjj#| ||}| j)||f|dk(s|j+drt-|d5}|j/}ddd|j1}t-|d5}|j3|ddd Q| }d}tj|D]\}}}||k(r]t5|D]F\}}t!|}|j+ds#tjj#||}||=n|sJd|D]y}t!|j+drtjj#||}t'tjj%||}| j)||f{tj6|}|D]l}|dvst!tjj#||}t'tjj#| |}| j)||fnd|xs |j8zdt:zd|zg}|j<D] \}}}|j)d|d |d |"tjj#|d}t-|d5}|j3dj#|dddt'tjj#| d}| j)||fd } t?| | !} |jA|| f| | tjj#|jB|jD}!|jG|!| |!S#1swYxYw#1swYxYw#1swYxYw)"z Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. Nc |vSrHrI)rKpathss rCrLzWheel.build..ss qEzrE)purelibplatlibrrfalsetruerrrrrr(%s.datar)rheadersscriptsr.exerwb .dist-infoz(.dist-info directory expected, not found)z.pycz.pyo)r INSTALLERSHAREDrzWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %szTag: rr  cH|d}|jd}d|vr|dz }||fS)NrrFri')count)trns rCsorterzWheel.build..sorters21B Ar!U r7NrE)key)$rr IMPVERABIARCHrgetrrrrarrOrbisdirwalkr r>relpathrr9endswithrrrr enumeratelistdir wheel_versionrrsortedr rrr)"rlrrr2libkeyis_pure default_pyver default_abi default_archrrdata_dirrrr'rbrootdirsfilesrrrprrrrrdnrrrrr&rps" ` rCbuildz Wheel.buildksO <Df13IJKAN Y G#HM%K 6LG"GM!(K!7LXXg}5 88E;/HHV\2 v"ii6x'!H, 2C%:Dww}}T")+%D$#$RWW\\$%;<WW__Q5%bggll8S"&EF%,,b!W5)+AJJv4F!%a!'(vvx"/#'#7#7#=D!%a! ! "/$*7 2(!# D$t|'t_EAr!"B{{<0#%77<<b#9 G -  K!KKxB<(()9:GGLLr*bggooa67$$b!W- "/* 8$BCCRWW\\(B78bggll8R89$$b!W-  #m&It7I7I J #k 1 !G +  !% E3  ! !UC"F G!* GGLL7 + !S\Q GGDIIn- . bggll8W5 6b!W%   }&9  Hh/G77<< dmm< x/K"/"/V\s$:S' 0S4 !T'S1 4S> T c$|jdS)zl Determine whether an archive entry should be skipped when verifying or installing. )rFz /RECORD.jws)r/)rlarcnames rC skip_entryzWheel.skip_entrys 455rEc |j}|jd}|jdd}|jdd}tjj |j |j }|jd|j} d| z} d| z} tj| t} tj| d} tj| d }tjd }t|d 5}|j| 5}||}t|}d d d d j!dd}t#|Dcgc] }t%|c}}||j&k7r|r||j&||ddk(r|d}n|d}i}|j|5}t)|5}|D] }|d}|||< d d d d d d tj| d}tj| d}tj| dd}t+|} d| _t.j0 }!g}"t3j4}#|#|_d |_ |j;D]}$|$j }%t=|%t>r|%}&n|%jAd }&|jC|&rF||&}|dr)tE|$jF|dk7rtId|&z|drj|dj!dd\}'}(|j|%5}|jK})d d d |jM)|'\}*}+|+|(k7rtId|%z|r+|&jO||frtPjSd|&|&jO|xr|&jUd },|&jO|rC|&j!d d\}*}-}.tjj ||-tW|.}/n1|&| |fvrtjj |tW|&}/|,s |j|%5}| jY||/d d d tjd!k(r&tjZ|/|$j\d"z d#z|"j_|/|sS|drNt|/d$5}|jK})|jM|)'\}*}0|0+k7rtId%|/z d d d |!s|/jUd&s | ja|/|'}1|"j_|1tjjgtW|%}2tjj |#|2}3|j|%5}| jY||3d d d tjj!|/\}4}2|4|_|ji|2}5| jk|5|"jm|5|rtPjSd*d }6nd }7|jnd }|d+k(rtj| d,}8 |j|85}tq|}9d d d i}7d-D]}:d.|:z};|;9vs ix|7d/|:z<}<|9|;jsD]Y}=|=jtd0|=jv}>|=jxr!|>d1d2j |=jxzz }>|>|<|=j<[nZ |j| 5}||}t{j||jd4}7|7r|7jd5}7d d d |7r|7jd7i}?|7jd8i}@|?s@r|jdd}Atjj|As td9A|_|?jD].\};}=|;d:|=}B|ji|B}5| jk|50@rFd;di}C@jD]/\};}=|;d:|=}B|ji|BC}5| jk|51tjj || }t|}6t|}|d=|d=||d<<|6j||}|r|"j_||6j|"|d=||6tj|#cd d d S#1swYxYwcc}w#1swYDxYw#1swYIxYw#1swYxYw#1swYxYw#1swYGxYw#tb$rtPjed(d)YwxYw#1swYxYw#1swY xYw#tb$rtPjed3YGwxYw#1swYUxYw#tb$rtPjed6YywxYw#tb$r'tPjd>| jwxYw#tj|#wxYw#1swYy xYw)?a~ Install a wheel to the specified paths. If kwarg ``warner`` is specified, it should be a callable, which will be called with two tuples indicating the wheel version of this software and the wheel version in the file, if there is a discrepancy in the versions. This can be used to issue any warnings to raise any exceptions. If kwarg ``lib_only`` is True, only the purelib/platlib files are installed, and the headers, scripts, data and dist-info metadata are not written. If kwarg ``bytecode_hashed_invalidation`` is True, written bytecode will try to use file-hash based invalidation (PEP-552) on supported interpreter versions (CPython 2.7+). The return value is a :class:`InstalledDistribution` instance unless ``options.lib_only`` is True, in which case the return value is ``None``. warnerlib_onlyFbytecode_hashed_invalidationr(rrrrrrNrr*rzRoot-Is-Purelibrrrstreamrr6r)dry_runTr&size mismatch for %s=digest mismatch for %szlib_only: skipping %srrFposixirzdigest mismatch on write for %sz.py)hashed_invalidationzByte-compilation failed)exc_infozlib_only: returning Nonez1.0zentry_points.txt)consoleguiz %s_scriptszwrap_%s:z [%s],zAUnable to read legacy script metadata, so cannot generate scriptsrqzpython.commandsz8Unable to read JSON metadata, so cannot generate scripts wrap_consolewrap_guizValid script path not specifiedz = rRlibprefixzinstallation failed.)JrIr+rOrbr>rrrarrrrrr rrrrrr2rrrecordr;dont_write_bytecodetempfilemkdtemp source_dir target_dirinfolist isinstancer rrBstr file_sizerrr startswithrrr/r copy_streamchmod external_attrr9 byte_compile Exceptionwarningbasenamemakeset_executable_modeextendrrvaluesrXsuffixflagsjsonloadr,ritemsr rwrite_shared_locationswrite_installed_filesshutilrmtree exceptionrollback)DrlrmakerkwargsrIrDrEbc_hashed_invalidationrprr9r metadata_namewheel_metadata_name record_namerrbwfrrrrrrrrreaderrrdata_pfxinfo_pfx script_pfxfileopbcoutfilesworkdirzinforA u_arcnamekindvaluerr)r is_scriptwherer=outfile newdigestpycrworknamer> filenamesdistcommandsepepdatar'rur.rvrWconsole_scripts gui_scripts script_dirscriptoptionssD rCinstallz Wheel.installs[ "--H%::j%0!',JE!R77<< dmm<"ii6x'!H,!x1IJ 'nnXw?nnXx8 ""7+ Xs #r,-S\+B/.)//Q7B "!5"Q#a&"!56L 2 22t))<8()V3y)y)G%b)V%F%(  &*& !~~h3H ~~h3H")R@J"'2F FM,,,BH&&(G 'E #E a '[[]E#nnG!'95$+ $+NN7$; y1 !),C1v#eoo"6#a&"@.046?0@AA1v&)!fll3&: eWWW-#%779D.$(MM$$= 6!U?"248:A4B#CC I$8$8(H9M$N % 5""$'',,uU|\"=M"N%)&,&9&9'Nd':'f ( 4 WW--l7.CD#%77<<#<WWW-"..r8<."$w!7B+-($)JJrN 229=  2W+ZLL!;<D $H#'99_#=L#u,&^^H6HI6!#)5c):"-')H'9$03$6#$;DF$FHY_$=-3AY-=-=-?78xx,J+,77,-388AGG;L1L,LA45!&& .@ (:F!#!73%,S\+/99R=+<+<\+J#+/7||!>/9E,(7(=(=(?167);,1JJv,> & : :9 E)@ ++0$.,7,=,=,?DAq:;Q-?F05 670KI$*$>$>y$I-@  VX6A03D!KEi(i(#)E%L33E7CA *..xx/68  g&U$ #--"6*)&%R.-,.-"5!4$->!'/H8<!/!>>.-0"- )6"NN,566 "8!7 )F"NN,EFFP   !78!   g&U$ #sh9d(&h9d Ah91 d >dd Bh9-B7g,$d-5Dg,d:#A%g,9e g,g,"$eAg,!e;4B.g,#f4 ffA;fg,g'Af:'g/E3g,"h9d  h9d d  d* %h9-d7 2g,:e ?g,e g, e84g,7e88g,;f g,f ff73g,6f77g,:g ?gg)%g,(g))g,,0hhh66h99ictQtjjt t ddt jddz}t|atS)Nz dylib-cachez%s.%sr&) cacherOrbr>rrar;r<r)rlbases rC_get_dylib_cachezWheel._get_dylib_cachesI =77<< 0#m2D '#*:*:2A*> >@D$KE rEc tjj|j|j}|j d|j }d|z}tj|d}tjd}g}t|d5} |j|5}||} tj| } |j} | j|} tjj| j | } tjj#| stj$| | j'D]\}}tjj| t)|}tjj+|sd}nptj,|j.}t0j0j3|}|j5|}t1j0|j6}||kD}|r|j9|| |j;||f dddddd|S#1swYxYw#t<$rY!wxYw#1swY|SxYw)Nr(r EXTENSIONSrrT)rOrbr>rrrarrrrr rrqrrr prefix_to_dirrr,makedirsrsrrstatst_mtimedatetime fromtimestampgetinfo date_timeextractr9r)rlrprrrArrzrrrrqrrX cache_baserar.destr file_timer wheel_times rC_get_extensionszWheel._get_extensionss77<< dmm<"ii6!H,..<8""7+ Xs #r WWW% B!%2J 113E"00:F!#ejj&!AJ77==4 J/)3)9)9); g!ww||J W8MN!ww~~d3&*G(* (>(>I(0(9(9(G(G (RI#%::g#6D)1):):DNN)KJ&09&rrrrrr;rrr9insertr_hook meta_pathrr)rlr9rpmsgrqs rCmountz Wheel.mounts77??277<< dmm#LM!!#=HC"3' '  "88CC"3' ' sxx  LL-x 8)8,--/J -MM((/ (J/rEctjjtjj|j|j }|t jvrtjd|yt jj||tjvrtj|tjs;tt jvr$t jjtyyy)Nz%s not in path) rOrbrr>rrr;rrrwrrir)rlrps rCunmountz Wheel.unmount(s77??277<< dmm#LM 388 # LL)8 4 HHOOH %5... X&&&CMM)MM((/*'rEc tjj|j|j}|j d|j }d|z}d|z}tj|t}tj|d}tj|d}tjd}t|d5} | j|5} || } t| } ddd djd d } t| Dcgc] }t!|c}}i}| j|5}t#| 5}|D] }|d }|||< dddddd| j%D] }|j}t'|t(r|}n|j+d}|jd }d|vrt-d|z|j/|ri||}|dr)t1|j2|dk7rt-d|z|d s|d jdd \}}| j|5}|j5}ddd|j7|\}}||k7st-d|z dddy#1swYxYwcc}w#1swYLxYw#1swYQxYw#1swYixYw#1swYyxYw)Nr(rrrrrrrr*rrGrrF..invalid entry in wheel: %rr&rJrKrL)rOrbr>rrrarrrrrr rrrrrrr_r`r rrrBrarbrr)rlrprr9rr}r~rrrrrrrrrrrrrrrrArrrrr)rs rCrz Wheel.verify4s77<< dmm<"ii6x'!H,!x1IJ 'nnXw?nnXx8 ""7+ Xs #r,-S\+B/.)//Q7B "!5"Q#a&"!56LG%b)V%F%(  &*& ..gy1 'I 'w 7IOOC(19*,79B,CDD??9-i(q6c%//2c!f<*,02;,<==q6"%a&,,sA"6KD%)R!wwy* $ dD 9IAv.046=0>??5'$ #--"6 *)&%8*)K$ #sK J'&K  J K 9 J0J#J0!B9K )K J="K 8K J  K #J- (J00J: 5K =K K  Kc d}d}tjj|j|j}|j d|j }d|z}tj|d} t5} t|d5} i} | jD]} | j}t|tr|}n|jd}|| k(r9d|vrtd |z| j| | tjj| t!|}|| |< d d d | |\}}|| fi|}|r || |\}}|r||k(r ||||1t#j$d d | \}}tj&|nWtjj)|std|ztjj||j}t+| j-}tjj| |}||f}|j/|| ||j1|||t3j4||d d d |S#1swYLxYw#1swYSxYw)a Update the contents of a wheel in a generic way. The modifier should be a callable which expects a dictionary argument: its keys are archive-entry paths, and its values are absolute filesystem paths where the contents the corresponding archive entries can be found. The modifier is free to change the contents of the files pointed to, add new entries and remove entries, before returning. This method will extract the entire contents of the wheel to a temporary location, call the modifier, and then use the passed (and possibly updated) dictionary to write a new wheel. If ``dest_dir`` is specified, the new wheel is written there -- otherwise, the original wheel is overwritten. The modifier should return True if it updated the wheel, else False. This method returns the same value the modifier returns. cxdx}}|dt}||vrd|z}||vr||}t|j}||fS)NrFz %s/PKG-INFOrb)rrr)path_maprrrbr's rC get_versionz!Wheel.update..get_version}sS! !Gd%'?@C("#h.h}"-55D= rEc d} t|}|jd}|dkrd|z}nZ||dzdjdDcgc] }t|}}|dxxdz cc<|d|ddj d|D}|rSt| }||_ |jt}|j|| t jd ||yycc}w#t $rt jd |Y|wxYw) Nr(rz%s+1rr*r+c32K|]}t|ywrH)ra).0rs rC z7Wheel.update..update_version..s1H%Q#a&%sz0Cannot update non-compliant (PEP-440) version %rr)rblegacyzVersion updated from %r to %r) rrrrr>rrrrrr/rr) rrbupdatedrvrrWr?mdrs rCupdate_versionz$Wheel.update..update_versions G 4%g.LL%q5$w.G-4QUV_-B-B3-GH-GSV-GEH"INI)0!),1H%1H)HJG 4($ '?@d62 rrrarrrr r_r`r rrrrr[mkstempcloser,rrsr rrvcopyfile)rlmodifierdest_dirr{rrrprrrrrrrrArrboriginal_versionr)modifiedcurrent_versionfdnewpathrrrs rCroz Wheel.updatelsH" ! &.77<< dmm<"ii6!H,nnXx8 Y'3'2[[]E#nnG!'95$+ $+NN7$;  K/ y(.0;=F0GHHJJug.77<<i1HID*.HY'+($#.h"A  a3F3H(3Hh(G%";K(K"?D9#"*"2"2&:I7>#@KBHHRL77==2./Dx/OPP ggll8T]]CG $X^^%5 6 77<<:)""4-@w 6#OOGX6YZY('Zs&; JB I3)EJ3I= 8JJ )NFFrH)NN)F)rrr__doc__r2rrmpropertyrrrrrrrrrrr rr?rBrrrrrrrrrorIrErCrrsMI'2R;; $$++ > < !%&  rh6 k'Z D#  0* 06?pcrErcddl}|j}g}|ddk(rP|djdD].}|j|j r t |nd0t |}|S)Nrglibcrr*)platformlibc_verrr9isdigitrr)rverrzrWs rC_get_glibc_versionrsc    C F 1vQc"A MMAIIK#a&Q 7#v MrEc btg}td}ttjddz ddD]-}|j dj |t |g/g}tD]8}|jds|j |jddd:|jtdk7r|jdt|j dg}tg}tjd k(rtj d t}|r|j#\}}}} t%|}| g} | d vr| j d | d vr| j d| dvr| j d| dvr| j d| dvr| j d|dk\r:| D]*} |d|d|d| } | tk7s|j | ,|dz}|dk\r:|D]`} |D]W} |j dj t&|df| | f| dk7s6tjjdsV| j)dd} t+}t-|dk(s|dk\r/|j dj t&|df| d| zf|dk\r/|j dj t&|df| d| zf|dk\r/|j dj t&|df| d| zf|j dj t&|df| d|dd|dd| fZct/|D]`\}}|j dj t&|fddf|dk(s5|j dj t&|dfddfbt/|D]X\}}|j dj d |fddf|dk(s1|j dj d |dfddfZt1|S)!zG Return (pyver, abi, arch) tuples compatible with this Python. rrrr6z.abir*r&rdarwinz(\w+)_(\d+)_(\d+)_(\w+)$)i386ppcfat)rrx86_64fat3)ppc64rfat64)rrintel)rrrrr universalr)linuxlinux_)r&z manylinux1_%s)r& zmanylinux2010_%s)r&zmanylinux2014_%s manylinux_rr')r7ranger;r<r9r>rarXrcrsortr)rr*rrerrrr:rNrrr0set)versionsmajorminorabisrorzarchesr2rarmatchesrrWrr?rrs rCcompatible_tagsrs|H qMEs''*Q.R8E 3459 D/   V $ KK S!,Q/ 0" IIK f} AsKK FVF ||x HH0$ 7 '(xxz $D%JEfG&u%00v&**w'))w'BB{+1*$E)-ueUCADy a(%  1*D MM277J #<=sDI Jf}!8!8!A||Hb1*,u:? rww HQK/H'I3'6'='?@' rww HQK/H'I3'9D'@'BC' rww HQK/H'I3'9D'@'BCMM277J +D#Es;@8U1X;?$A#BC!, ) 7 rww G45vuEF 6 MM277J #;rsh( #   +CC+11!!!@   8 $  3#$J\\V$J\\UJJ %Y % %&8 9 #**2A..J z j ~c3'//S9iw'3>>* % ++j$ ' - -c 21 5C" -Cbjj]]RZZ! "**]]RZZ ! RZZ) * BJJ@A66S=H/HA C6 !f!F  h Fh TM`"# rE