VULN_CHECK_I913V6 j[ dZddlZddlZddlmZddlmZgdZeje Z Gdde Z Gd d e ZGd d e Zej d ZdZeZGddeZdZGddeZej ddfej ddfej ddfej ddfej ddfej ddfej ddfej d d!fej d"d#fej d$d%ff Zej d&dfej d'dfej d(dfej ddfej d)dffZej d*Zd+Zd,Zej d-ej8Zd.d.d/d.d0ddd1Zd2ZGd3d4eZ Gd5d6eZ!ej d7ej8Z"d8Z#d9Z$Gd:d;eZ%Gd<d=eZ&Gd>d?e Z'e'eeee'ee!d@e'e$e&edAZ(e(dBe(dC<dDZ)y)Ez~ Implementation of a flexible versioning scheme providing support for PEP-440, setuptools-compatible and semantic versioning. N) string_typesparse_requirement)NormalizedVersionNormalizedMatcher LegacyVersion LegacyMatcherSemanticVersionSemanticMatcherUnsupportedVersionError get_schemeceZdZdZy)r zThis is an unsupported version.N)__name__ __module__ __qualname____doc__@/usr/lib/python3.12/site-packages/pip/_vendor/distlib/version.pyr r s)rr cdeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zed Zy)Versioncb|jx|_}|j|x|_}yN)strip_stringparse_parts)selfspartss r__init__zVersion.__init__s(779$ q"jjm+ erctd)Nzplease implement in a subclassNotImplementedErrorrr s rrz Version.parse%s!"BCCrcTt|t|k7rtd|d|yNzcannot compare z and )type TypeErrorrothers r_check_compatiblezVersion._check_compatible(s' :e $$FG G %rcV|j||j|jk(Srr-rr+s r__eq__zVersion.__eq__,s# u%{{ell**rc&|j| Srr0r+s r__ne__zVersion.__ne__0;;u%%%rcV|j||j|jkSrr/r+s r__lt__zVersion.__lt__3s# u%{{U\\))rcL|j|xs|j| Srr6r0r+s r__gt__zVersion.__gt__7s"KK&<$++e*<==rcJ|j|xs|j|Srr8r+s r__le__zVersion.__le__:{{5!7T[[%77rcJ|j|xs|j|Sr)r9r0r+s r__ge__zVersion.__ge__=r<rc,t|jSr)hashrrs r__hash__zVersion.__hash__AsDKK  rcN|jjd|jdS)Nz('z') __class__rrrAs r__repr__zVersion.__repr__Ds!^^44dllCCrc|jSrrrAs r__str__zVersion.__str__G ||rctd)NzPlease implement in subclasses.r$rAs r is_prereleasezVersion.is_prereleaseJs!"CDDrN)rrrr"rr-r0r3r6r9r;r>rBrFrIpropertyrLrrrrrsW DH+&*>88!DEErrc |eZdZdZdddddddd d Zd Zd Zd ZedZ dZ dZ dZ dZ dZdZy)MatcherNc ||kSrrvcps rzMatcher.TQUrc ||kDSrrrQs rrUzMatcher.UrVrc||k(xs||kSrrrQs rrUzMatcher.Va1foAorc||k(xs||kDSrrrQs rrUzMatcher.WrYrc ||k(SrrrQs rrUzMatcher.Xa1frc ||k(SrrrQs rrUzMatcher.YsqAvrc||k(xs||kDSrrrQs rrUzMatcher.[rYrc ||k7SrrrQs rrUzMatcher.\r\r)<><=>======~=!=ct|Srrr&s rrzMatcher.parse_requirementas  ##rc,|j td|jx|_}|j |}|std|z|j |_|j j |_g}|jrw|jD]h\}}|jdr+|dvrtd|z|ddd}}|j|n|j|d}}|j|||fjt||_ y) NzPlease specify a version classz Not valid: %rz.*)rdrgz#'.*' not allowed for %r constraintsTF) version_class ValueErrorrrrnamelowerkey constraintsendswithappendtupler)rr rclistopvnprefixs rr"zMatcher.__init__ds    %=> >779$ q  " "1 %_q01 1FF 99??$ ==A::d#-(*:<>*?@@"#3BB&&r*"&!3!3A!6B b"f-.'El rcFt|tr|j|}|jD]q\}}}|jj |}t|tr t ||}|s&|d|jj}t|||||rqyy)z Check if the provided version matches the constraints. :param version: The version to match against this instance. :type version: String or :class:`Version` instance. z not implemented for FT) isinstancerrkr _operatorsgetgetattrrErr%)rversionoperator constraintrxfmsgs rmatchz Matcher.matchs g| ,((1G,0KK (Hj&##H-A!\*D!$#+T^^-D-DF)#..Wj&1-8rcd}t|jdk(r&|jdddvr|jdd}|S)Nrr)rdre)lenr)rresults r exact_versionzMatcher.exact_versionsC t{{ q T[[^A%6-%G[[^A&F rct|t|k7s|j|jk7rtd|d|yr()r)rmr*r+s rr-zMatcher._check_compatibles7 :e $ UZZ(?$FG G)@rc|j||j|jk(xr|j|jk(Sr)r-rorr+s rr0zMatcher.__eq__s5 u%xx599$D )DDrc&|j| Srr2r+s rr3zMatcher.__ne__r4rcXt|jt|jzSr)r@rorrAs rrBzMatcher.__hash__sDHH~T[[ 111rcN|jjd|jdS)N()rDrAs rrFzMatcher.__repr__s>>22DLLAArc|jSrrHrAs rrIzMatcher.__str__rJr)rrrrkr{rr"rrMrr-r0r3rBrFrIrrrrOrOOslM# "--$%-$ J$#:* HE&2BrrOzk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c |j}tj|}|std|z|j }t d|dj dD}t|dkDr$|ddk(r|dd}t|dkDr |ddk(r|dsd}nt|ddd}|dd}|d d }|d d }|d }|dk(rd}n|dt|df}|dk(rd}n|dt|df}|dk(rd}n|dt|df}|d}nVg} |j dD]5} | jrdt| f} nd| f} | j| 7t | }|s |s|rd}nd}|sd}|sd}||||||fS)NzNot a valid version: %sc32K|]}t|ywrint.0rRs r z_pep_440_key..s6!5AQ!5r.r )NNr)ar)z)_)final) rPEP440_VERSION_RErr groupsrssplitrrisdigitrr) r mrnumsepochprepostdevlocalr!parts r _pep_440_keyrs  A"A %&?!&CDD XXZF 6!56 6D d)a-DHMCRy d)a-DHM !9F1IcrN# 1+C !A;D B-C 2JE l!fc#a&k! |AwDG $ l!fc#a&k! }KK$D||~3t9~4y LL %e  CC   $T3 --rc:eZdZdZdZegdZedZy)raIA rational version. Good: 1.2 # equivalent to "1.2.0" 1.2.0 1.2a1 1.2.3a2 1.2.3b1 1.2.3c1 1.2.3.4 TODO: fill this out Bad: 1 # minimum two numbers 1.2a # release level must have a release serial 1.2.3b ct|}tj|}|j}t d|dj dD|_|S)Nc32K|]}t|ywrrrs rrz*NormalizedVersion.parse..s$J5ISV5Irrr)_normalized_keyrrrrsr_release_clause)rr rrrs rrzNormalizedVersion.parse sN #  # #A &$$JVAY__S5I$JJ r)rbrSrcrc@tfdjDS)Nc3FK|]}|s|djvyw)rN) PREREL_TAGS)rtrs rrz2NormalizedVersion.is_prerelease..s#F[A1Q44+++[s!!)anyrrAs`rrLzNormalizedVersion.is_prereleasesFT[[FFFrN) rrrrrsetrrMrLrrrrrs-" 23K GGrrct|}t|}||k(ry|j|syt|}||dk(S)NTFr)str startswithr)xyns r _match_prefixrsC AA AAAv <<? AA Q43;rc \eZdZeZddddddddd Zd Zd Zd Zd Z dZ dZ dZ dZ dZy)r_match_compatible _match_lt _match_gt _match_le _match_ge _match_eq_match_arbitrary _match_ne)rfr`rarbrcrdrergc|rd|vxr|jd}n!|jd xr|jd}|r0|jjddd}|j|}||fS)N+rrr)rrrrk)rr~rrx strip_localr s r _adjust_localzNormalizedMatcher._adjust_local6sy Z/FGNN24FK )//33Jr8JK %%c1-a0A((+G ""rc|j|||\}}||k\ry|j}dj|Dcgc] }t|c}}t || Scc}wNFrrrjoinrrrr~rrxrelease_clauseipfxs rrzNormalizedMatcher._match_ltDg"00*fM j #33hh71A78 #...8Ac|j|||\}}||kry|j}dj|Dcgc] }t|c}}t || Scc}wrrrs rrzNormalizedMatcher._match_gtLrrc8|j|||\}}||kSrrrr~rrxs rrzNormalizedMatcher._match_leT&"00*fM*$$rc8|j|||\}}||k\Srrrs rrzNormalizedMatcher._match_geXrrc\|j|||\}}|s||k(}|St||}|Srrrrr~rrxrs rrzNormalizedMatcher._match_eq\sB"00*fM+F #7J7F rc0t|t|k(Sr)rrs rrz"NormalizedMatcher._match_arbitraryds7|s:..rc^|j|||\}}|s||k7}|St|| }|Srrrs rrzNormalizedMatcher._match_negsE"00*fM+F 'w ;;F rc|j|||\}}||k(ry||kry|j}t|dkDr|dd}dj|Dcgc] }t |c}}t ||Scc}w)NTFrrr)rrrrrrrs rrz#NormalizedMatcher._match_compatibleos"00*fM j  Z $33 ~  "+CR0Nhh71A78Wc**8sA6N)rrrrrkr{rrrrrrrrrrrrrr'sU%M"  ! J #//%%/ +rrz[.+-]$z^[.](\d)z0.\1z^[.-]z ^\((.*)\)$\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rz\b(alfa|apha)\balphaz\b(pre-alpha|prealpha)\bz pre.alphaz \(beta\)$betaz ^[:~._+-]+z [,*")([\]]z[~:+_ -]z\.$z (\d+(\.\d+)*)cv|jj}tD]\}}|j||}|sd}tj |}|sd}|}n|j djd}|Dcgc] }t|}}t|dkr |jdt|dkr t|dk(r||jd}nDdj|ddDcgc] }t|c}||jdz}|dd}dj|Dcgc] }t|c}}|j}|r tD]\}}|j||}|s|}nd|vrdnd}||z|z}t|sd}|Scc}wcc}wcc}w) z Try to suggest a semantic form for a version for which _suggest_normalized_version couldn't come up with anything. z0.0.0rrNr-r)rrn _REPLACEMENTSsub_NUMERIC_PREFIXrrrrrrrendrr_SUFFIX_REPLACEMENTS is_semver) r rpatreplrrxsuffixrseps r_suggest_semantic_versionrs WWY__ F" Tv&#  f%A A$$S)"()&Q#a&&)&kAo MM! &kAo v;! AEEGH%FXXvabz:z!s1vz:;fQUUWX>NNFBQZF626a3q6623 .ICWWT6*F. f_c##& V  M/* ;2sF,<F1=F6c t||S#t$rYnwxYw|j}dD]\}}|j||}t j dd|}t j dd|}t j dd|}t j dd |}t j d d |}|j d r|d d}t j dd |}t j dd|}t j dd|}t j dd|}t j dd|}t j dd|}t j dd|}t j dd|}t j dd|}t j dd|}t j dd |} t||S#t$rd}Y|SwxYw)!aSuggest a normalized version close to the given version string. If you have a version string that isn't rational (i.e. NormalizedVersion doesn't like it) then you might be able to get an equivalent (or close) rational version from this function. This does a number of simple normalizations to the given string, based on observation of versions currently in use on PyPI. Given a dump of those version during PyCon 2009, 4287 of them: - 2312 (53.93%) match NormalizedVersion without change with the automatic suggestion - 3474 (81.04%) match when using this suggestion method @param s {str} An irrational version string. @returns A rational version string, or None, if couldn't determine one. ))z-alphar)z-betar)rr)rr)rrS)z-finalr)z-prerS)z-releaser)z.releaser)z-stabler)rr)rr) r)z.finalr)rrzpre$pre0zdev$dev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?rrRrNz\b0+(\d+)(?!\d)z (\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$rz\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1)rr rnreplacererr)r rsorigrs r_suggest_normalized_versionrs"  "    B& d ZZd # & " %B " %B )7B 7B -x .get_partsCs$$QWWY/A $$Q*A!BQ%&3& AaA a 0  h rr r rz*final-00000000)rpoprrrs)r rrrTs r _legacy_keyrBs F q\ << 8|y!8JJLy!8VBZ:5 VBZ:5 a =rc"eZdZdZedZy)r ct|Sr)rr&s rrzLegacyVersion.parse]s 1~rcd}|jD]/}t|ts|jds&|dks,d}|S|S)NFr r T)rrzrr)rrrs rrLzLegacyVersion.is_prerelease`sEA1l+ S0AH    rNrrrrrMrLrrrr r \srr cheZdZeZeejZded<ejdZ dZ y)r rrfz^(\d+(\.\d+)*)c||kry|jjt|}|stj d||y|j d}d|vr|j ddd}t||S)NFzACannot compute compatible match for version %s and constraint %sTrrr) numeric_rerrloggerwarningrrsplitr)rr~rrxrr s rrzLegacyMatcher._match_compatiblessz Z  OO ! !#j/ 2 NN018* F HHJqM !8a #AWa((rN) rrrr rkdictrOr{rcompilerrrrrr r ks7!Mg(()J*Jt-.J )rr zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c,tj|Sr) _SEMVER_REr)r s rrrs   A rcd}t|}|s t||j}|ddDcgc] }t|c}\}}}||dd||dd} }|||f|| fScc}w)Nc||f}|S|ddjd}t|Dcgc]%}|jr|jdn|'c}}|Scc}w)Nrrr )rrsrr)r absentrr!rTs r make_tuplez!_semantic_key..make_tuplesf 9YF  abEKK$EeLe!))+AGGAJ1> !F ^^A&F rr)rrrr"r9r;r>r@rrrr2r2s# <rr2c|Srrr&s rrUrUsr) normalizedlegacysemanticrBdefaultc@|tvrtd|zt|S)Nzunknown scheme name: %r)_SCHEMESrl)rms rrrs% 82T9:: D>r)*rloggingrcompatrutilr__all__ getLoggerrrrlr objectrrOrrrrrrrrrrrrIr rrr r r!rr,r r r2rGrrrrrOs   # 4   8 $ j .Ef.EbafaHBJJ FG :.z!G!GHT+T+nRZZ2RZZ g&RZZ"RZZ &RZZ&'/RZZ"#U+RZZ C RZZ"#W-RZZ+,RZZ v&  RZZ r"RZZ #RZZ S!RZZ C RZZ "**-.+\ld 0"$$7    4 G )G)2RZZ:;=44A -*(g($g$$F$N 1B ;=K8IJm_79  |,r