
    q"hz                    L   S SK r S SKJr  S SKrS SKrS SKJr  S SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKr S SKrS SKrS SKrS SKrS SKrS SKr S SKrS SKrSSKJr  SSKJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/  \
R`                  " \15      r2\Rf                  " S5      r4\Rf                  " S5      r5\Rf                  " S	5      r6\Rf                  " S
5      r7\Rf                  " S5      r8\Rf                  " S5      r9\Rf                  " S5      r:\Rf                  " S5      r;S r<S r=S r>S r?S r@SiS jrAS rBS rCS rD\R                  S 5       rF\R                  S 5       rG\R                  SjS j5       rH " S S\I5      rJS rK " S S\I5      rLS  rM " S! S"\I5      rN\Rf                  " S#\R                  5      rPS$ rQSkS% jrRSlS& jrSS' rTS( rUS) rVS* rW\Rf                  " S+\R                  5      rY\Rf                  " S,5      rZSkS- jr[\Rf                  " S.5      r\S/ r]S0 r^S1 r_S2r`S3 raS4 rb " S5 S6\I5      rc " S7 S8\I5      rd " S9 S:\I5      reS;rfSmS< jrgS= rhS>ri " S? S@\I5      rj\Rf                  " SA5      rk\Rf                  " SB5      rl\Rf                  " SC5      rmSD rSE rn\(       a6  SSFKJorpJqrqJrrr   " SG SH\$R                  5      rs " SI SJ\p5      ro " SK SL\o\&5      rt " SM SN\%R                  5      ru\(       a   " SO SP\%R                  5      rv " SQ SR\%R                  5      rwSS rx " ST SU\I5      ry " SV SW\y5      rz " SX SY\y5      r{ " SZ S[\'5      r| " S\ S]\I5      r}S^ r~ " S_ S`\I5      rSa rSb rSc rSdSeSfSg.rSh rg! \ a    Sr GNWf = f! \ a    S SKr GNOf = f)n    N)deque)iglob   )DistlibException)string_types	text_typeshutil	raw_inputStringIOcache_from_sourceurlopenurljoinhttplib	xmlrpclibHTTPHandlerBaseConfiguratorvalid_ident	ContainerconfigparserURLErrorZipFilefsdecodeunquoteurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z	^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)c                 F   ^^^^ S mUU4S jmU4S jmU4S jmT" U 5      $ )aM  
Parse a marker string and return a dictionary containing a marker expression.

The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in
the expression grammar, or strings. A string contained in quotes is to be
interpreted as a literal string, and a string not contained in quotes is a
variable (such as os_name).
c                    [         R                  U 5      nU(       a(  UR                  5       S   nXR                  5       S  n X 4$ U (       d  [	        S5      eU S   nUS;  a  [	        SU -  5      eSR                  US5      nU SS  n U/nU (       a  U S   U:X  a  OU S   U:X  a  UR                  U5        U SS  n O^[        R                  U 5      nU(       d  [	        SU -  5      eUR                  UR                  5       S   5        XR                  5       S  n U (       a  M  SR                  U5      n[	        SU-  5      eUR                  U5        SR                  U5      nU SS  R                  5       n X 4$ )	Nr   zunexpected end of inputz'"zinvalid expression: %s r   zerror in string literal: %szunterminated string: %s)

IDENTIFIERmatchgroupsendSyntaxErrorreplaceappendSTRING_CHUNKjoinlstrip)	remainingmresultqoqpartsss          J/var/www/html/env/lib/python3.13/site-packages/pip/_vendor/distlib/util.py
marker_var parse_marker.<locals>.marker_var@   sn   Y'XXZ]F!%%'(+I:   9 788!A~!":Y"FGGq"%B!!"ICEQ<1$q\R'LL$ )!"I$**95A)*G)*STTLLA/ )%%'( 3I ) GGEN!";a"?@@LLOWWU^F!!",,.I      c                   > U (       aQ  U S   S:X  aH  T" U SS  R                  5       5      u  pU S   S:w  a  [        SU -  5      eU SS  R                  5       n X4$ T" U 5      u  p U (       aZ  [        R                  U 5      nU(       d  O=UR	                  5       S   nXR                  5       S  n T" U 5      u  pPXBUS.nU (       a  MZ  UnX4$ )Nr   (r   )unterminated parenthesis: %soplhsrhs)r'   r"   	MARKER_OPr   r    r!   )r(   r*   r9   r)   r8   r:   markerr0   s         r/   marker_expr!parse_marker.<locals>.marker_exprd   s    1, &y}';';'= >F|s"!"@9"LMM!!",,.I    (	2NCOOI.XXZ]%eegh/	!+I!6C8 ) F  r2   c                    > T" U 5      u  pU (       aJ  [         R                  U 5      nU(       d   X4$ XR                  5       S  n T" U 5      u  p0SXS.nU (       a  MJ  X4$ )Nandr7   )ANDr   r!   )r(   r9   r)   r:   r=   s       r/   
marker_and parse_marker.<locals>.marker_andw   si    $Y/		)$A ~ "%%'(+I(3NCs7C i ~r2   c                    > T" U 5      u  pU (       aJ  [         R                  U 5      nU(       d   X4$ XR                  5       S  n T" U 5      u  p0SXS.nU (       a  MJ  X4$ )Norr7   )ORr   r!   )r(   r9   r)   r:   rB   s       r/   r<   parse_marker.<locals>.marker   si    #I.#A ~ "%%'(+I'	2NCc6C i ~r2    )marker_stringr<   rB   r=   r0   s    @@@@r/   parse_markerrJ   6   s%    "!H!&		 -  r2   c           	         U R                  5       nU(       a  UR                  S5      (       a  g[        R                  U5      nU(       d  [	        SU-  5      eUR                  5       S   nXR                  5       S nS=n=n=pgU(       a  US   S:X  a  UR                  SS5      nUS:  a  [	        SU-  5      eUSU n	XS-   S R                  5       n/ nU	(       a  [        R                  U	5      nU(       d  [	        S	U	-  5      eUR                  UR                  5       S   5        XR                  5       S n	U	(       d  O3U	S   S
:w  a  [	        SU	-  5      eU	SS R                  5       n	U	(       a  M  U(       d  SnU(       Ga  US   S:X  a  USS R                  5       n[        R                  U5      nU(       d  [	        SU-  5      eUR                  5       S   n[        U5      n
U
R                  (       a  U
R                  (       d  [	        SU-  5      eXR                  5       S R                  5       nOS nUS   S:w  a  U" U5      u  paOUR                  SS5      nUS:  a  [	        SU-  5      eUSU n	XS-   S R                  5       n[        R                  U	5      (       a  U" U	5      u  plOw[        R                  U	5      nU(       d  [	        SU	-  5      eUR                  5       S   nXR                  5       S R                  5       n	U	(       a  [	        SU	-  5      eSU4/nU(       a7  US   S:w  a  [	        SU-  5      eUSS R                  5       n[!        U5      u  pQU(       a  US   S:w  a  [	        SU-  5      eU(       d  UnO,U< SSR#                  U Vs/ s H  nSU-  PM
     sn5      < 3n[%        X4XeX~S9$ s  snf )z~
Parse a requirement passed in as a string. Return a Container
whose attributes contain the various parts of the requirement.
#Nzname expected: %sr   []r   zunterminated extra: %szmalformed extra: %s,zcomma expected in extras: %s@zinvalid URI: %szInvalid URL: %sc                    [         R                  U 5      nSnU(       a  / n UR                  5       S   nXR                  5       S n [        R                  U 5      nU(       d  [        SU -  5      eUR                  5       S   nUR                  X445        XR                  5       S n U (       a	  U S   S:w  a  OGU SS R                  5       n U (       d  O,[         R                  U 5      nU(       d  [        SU -  5      eM  U(       d  SnX 4$ )zL
Return a list of operator, version tuples if any are
specified, else None.
Nr   zinvalid version: %srO   r   invalid constraint: %s)
COMPARE_OPr   r    r!   VERSION_IDENTIFIERr"   r$   r'   )ver_remainingr)   versionsr8   vs        r/   get_versions'parse_requirement.<locals>.get_versions   s    
 $$]3!HXXZ](5eegh(?.44]C "-.Cm.S"TTHHJqM 0(5eegh(?,a0@C0G!(5ab(9(@(@(B  -!&,,]; "-.F.V"WW% & $#'..r2   r4   r5   r6   rR   z~=;zinvalid requirement: %szunexpected trailing data: %s , z%s %s)nameextrasconstraintsr<   urlrequirement)strip
startswithr   r   r"   r    r!   findr'   r$   	NON_SPACEr   schemenetlocrS   rT   rJ   r&   r   )reqr(   r)   distnamer^   	mark_exprrV   uriir.   trX   _rW   rscons                   r/   parse_requirementrq      s   
 		I	,,S11#A-	9::xxz!}H%%'(#I*..F.Y.Yq\S(NN3"q56BCCaN!ef%,,.	  #A!"7!";<<MM!((*Q-(%%'(Ats{!"@1"DEE!"A a FQ<3!!",,.I	*A!"3i"?@@((*Q-CA
 HH!"3c"9::!%%'(+224I/@ |s"&29&=#)NN3*q5%&Dy&PQQaN%!ef-446	 ##A&&".q/KHa*003A)*BQ*FGG
1A%%'(**,A)*BQ*FGG!%q	{HQ<37)CDDabM((*	+I6	Yq\S(89DEE $))h,OhsWs]h,O"PQ(x_bss -Ps   )Oc                    S n0 nU H  u  pEn[         R                  R                  X5      n[        U5       H  n[         R                  R                  X5      n	[        U	5       Hm  n
U" X
5      nUc  UR	                  US5        M"  U" X5      nUR                  [         R                  R                  S5      R                  S5      nUS-   U-   X;'   Mo     M     M     U$ )z%Find destinations for resources filesc                    U R                  [        R                  R                  S5      n UR                  [        R                  R                  S5      nUR	                  U 5      (       d   eU[        U 5      S  R                  S5      $ N/)r#   ospathseprc   lenr'   )rootrw   s     r/   get_rel_path)get_resources_dests.<locals>.get_rel_path  sc    ||BGGKK-||BGGKK-t$$$$CIJ&&s++r2   Nru   )rv   rw   r&   r   popr#   rx   rstrip)resources_rootrulesr{   destinationsbasesuffixdestprefixabs_baseabs_globabs_pathresource_filerel_pathrel_dests                 r/   get_resources_destsr     s    , L#dn3fHww||H5H!(O ,^ F< $$]D9+H?H#||BGGKK=DDSIH2:S.82KL/ , & $ r2   c                      [        [        S5      (       a  Sn U $ [        R                  [        [        S[        R                  5      :g  n U $ )Nreal_prefixTbase_prefix)hasattrsysr   getattrr*   s    r/   in_venvr   &  s=    sM"" M wsM3::FFMr2   c                  f    [         R                  n [        U [        5      (       d  [	        U 5      n U $ N)r   
executable
isinstancer   r   r   s    r/   get_executabler   0  s)     ^^Ffi((&!Mr2   c                     U n [        U5      nU nU(       d	  U(       a  UnU(       a)  US   R                  5       nXa;   a   U$ U(       a  SXbU 4-  nMO  )Nr   z	%c: %s
%s)r
   lower)promptallowed_charserror_promptdefaultpr.   cs          r/   proceedr   B  s]    A
aLWA!

A! H  AV#<< r2   c                     [        U[        5      (       a  UR                  5       n0 nU H  nX0;   d  M
  X   X#'   M     U$ r   )r   r   split)dkeysr*   keys       r/   extract_by_keyr   R  s>    $%%zz|F8&FK  Mr2   c                 b   [         R                  S   S:  a  [        R                  " S5      " U 5      n U R	                  5       n[        U5      n  [        R                  " U 5      nUS   S   S   nUR                  5        H;  u  pEUR                  5        H"  u  pgU< SU< 3n[        U5      n	U	c   eXU'   M$     M=     U$ ! [         a    U R                  SS5         Of = fS n
[        R                  " 5       n U
" X5        OS! [        R                   a<    U R                  5         [         R"                  " U5      n[        U5      n U
" X5         Of = f0 nUR%                  5        H@  n0 =X<'   nUR                  U5       H"  u  pU< SU< 3n[        U5      n	U	c   eXU'   M$     MB     U$ )	Nr      utf-8
extensionszpython.exportsexports = c                 l    [        U S5      (       a  U R                  U5        g U R                  U5        g )N	read_file)r   r   readfp)cpstreams     r/   read_stream!read_exports.<locals>.read_streamp  s'    2{##LL IIfr2   )r   version_infocodecs	getreaderreadr   jsonloaditemsget_export_entry	Exceptionseekr   ConfigParserMissingSectionHeaderErrorclosetextwrapdedentsections)r   datajdatar*   groupentrieskrW   r.   entryr   r   r   r]   values                  r/   read_exportsr   \  s   
a!!'*62;;=Dd^F		&!|$%56yA$llnNE!"A&(+((("
	 ( -  Aq 
	"	"	$B B11  t$$B	  F{{} ""g88C=KD!5)A$Q'E$$$!DM )  Ms&   A1C C! C!=D AEEc                 F   [         R                  S   S:  a  [        R                  " S5      " U5      n[        R
                  " 5       nU R                  5        H  u  p4UR                  U5        UR                  5        H  nUR                  c  UR                  nOUR                  < SUR                  < 3nUR                  (       a#  U< SSR                  UR                  5      < S3nUR                  X5R                  U5        M     M     UR                  U5        g )Nr   r   r   :z [r\   rN   )r   r   r   	getwriterr   r   r   add_sectionvaluesr   r   flagsr&   setr]   write)r   r   r   r   rW   r   r.   s          r/   write_exportsr     s    
a!!'*62		"	"	$B
qXXZE||#LL$||U\\:{{!"DIIekk$:;FF1jj!$     HHVr2   c               #      #    [         R                  " 5       n  U v   [        R                  " U 5        g ! [        R                  " U 5        f = f7fr   )tempfilemkdtempr	   rmtree)tds    r/   tempdirr     s5     				Bbbs   A4 AAAc              #      #    [         R                  " 5       n [         R                  " U 5        S v   [         R                  " U5        g ! [         R                  " U5        f = f7fr   )rv   getcwdchdir)r   cwds     r/   r   r     s9     
))+C

   A%A
 A%
A""A%c              #      #    [         R                  " 5       n [         R                  " U 5        S v   [         R                  " U5        g ! [         R                  " U5        f = f7fr   )socketgetdefaulttimeoutsetdefaulttimeout)secondsctos     r/   socket_timeoutr     sE     

"
"
$C&  )  %  %r   c                   $    \ rS rSrS rSS jrSrg)cached_propertyi  c                     Xl         g r   func)selfr   s     r/   __init__cached_property.__init__  s    	r2   Nc                     Uc  U $ U R                  U5      n[        R                  XR                   R                  U5        U$ r   )r   object__setattr____name__)r   objclsr   s       r/   __get__cached_property.__get__  s8    ;K		#3		 2 2E:r2   r   r   )r   
__module____qualname____firstlineno__r   r   __static_attributes__rH   r2   r/   r   r     s    
r2   r   c                    [         R                  S:X  a  U $ U (       d  U $ U S   S:X  a  [        SU -  5      eU S   S:X  a  [        SU -  5      eU R                  S5      n[         R                  U;   a5  UR                  [         R                  5        [         R                  U;   a  M5  U(       d  [         R                  $ [         R                  R                  " U6 $ )a  Return 'pathname' as a name that will work on the native filesystem.

The path is split on '/' and put back together again using the current
directory separator.  Needed because filenames in the setup script are
always supplied in Unix style, and have to be converted to the local
convention before we can actually use them in the filesystem.  Raises
ValueError on non-Unix-ish systems if 'pathname' either starts or
ends with a slash.
ru   r   zpath '%s' cannot be absolutezpath '%s' cannot end with '/')rv   rx   
ValueErrorr   curdirremoverw   r&   )pathnamepathss     r/   convert_pathr    s     
vv}{c7(BCC|s88CDDNN3E
))u
RYY ))u
yy77<<r2   c                       \ rS rSrSS jrS rS rS rSS jrSS jr	S	 r
S
 rS rS rS rSS jrS rS rS rS rSrg)FileOperatori  c                 N    Xl         [        5       U l        U R                  5         g r   )dry_runr   ensured_init_record)r   r  s     r/   r   FileOperator.__init__  s    ur2   c                 N    SU l         [        5       U l        [        5       U l        g NF)recordr   files_writtendirs_createdr   s    r/   r
  FileOperator._init_record  s     UEr2   c                 ^    U R                   (       a  U R                  R                  U5        g g r   )r  r  add)r   rw   s     r/   record_as_writtenFileOperator.record_as_written  s"    ;;""4( r2   c                 l   [         R                  R                  U5      (       d+  [        S[         R                  R	                  U5      -  5      e[         R                  R                  U5      (       d  g[         R
                  " U5      R                  [         R
                  " U5      R                  :  $ )a  Tell if the target is newer than the source.

Returns true if 'source' exists and is more recently modified than
'target', or if 'source' exists and 'target' doesn't.

Returns false if both exist and 'target' is the same age or younger
than 'source'. Raise PackagingFileError if 'source' does not exist.

Note that this test is not very accurate: files created in the same
second will have the same "age".
zfile '%r' does not existT)rv   rw   existsr   abspathstatst_mtime)r   sourcetargets      r/   newerFileOperator.newer  ss     ww~~f%%"#=PV@W#WXXww~~f%%wwv''"''&/*B*BBBr2   c                 &   U R                  [        R                  R                  U5      5        [        R                  SX5        U R                  (       d  SnU(       aw  [        R                  R                  U5      (       a  SU-  nOM[        R                  R                  U5      (       a)  [        R                  R                  U5      (       d  SU-  nU(       a  [        US-   5      e[        R                  " X5        U R                  U5        g)z8Copy a file respecting dry-run and force flags.
        zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)
ensure_dirrv   rw   dirnameloggerinfor  islinkr  isfiler   r	   copyfiler  )r   infileoutfilecheckmsgs        r/   	copy_fileFileOperator.copy_file	  s     	01&8||C77>>'**+g5CWW^^G,,RWW^^G5L5L4w>C 'D!DEEOOF,w'r2   Nc                    [         R                  R                  U5      (       a   eU R                  [         R                  R	                  U5      5        [
        R                  SX5        U R                  (       dM  Uc  [        US5      nO[        R                  " USUS9n [        R                  " X5        UR                  5         U R                  U5        g ! UR                  5         f = f)NzCopying stream %s to %swbwencoding)rv   rw   isdirr!  r"  r#  r$  r  openr   r	   copyfileobjr   r  )r   instreamr)  r2  	outstreams        r/   copy_streamFileOperator.copy_stream  s    77==))))01-xA|| $/	"KKxH	"""87!w' !s   #C C-c                    U R                  [        R                  R                  U5      5        U R                  (       d`  [        R                  R                  U5      (       a  [        R                  " U5        [        US5       nUR                  U5        S S S 5        U R                  U5        g ! , (       d  f       N = f)Nr/  )
r!  rv   rw   r"  r  r  r  r4  r   r  )r   rw   r   fs       r/   write_binary_fileFileOperator.write_binary_file)  ss    -.||ww~~d##		$dD!Q "t$ "!s   B22
C c                 D    U R                  XR                  U5      5        g r   )r<  encode)r   rw   r   r2  s       r/   write_text_fileFileOperator.write_text_file2  s    t[[%:;r2   c                    [         R                  S:X  d(  [         R                  S:X  a  [         R                  S:X  a  U H~  nU R                  (       a  [        R                  SU5        M,  [         R                  " U5      R                  U-  U-  n[        R                  SXE5        [         R                  " XE5        M     g g g )Nposixjavazchanging mode of %szchanging mode of %s to %o)	rv   r]   _namer  r#  r$  r  st_modechmod)r   bitsmaskfilesr;  modes         r/   set_modeFileOperator.set_mode5  s    77g"''V"3G8K <<KK 5q9GGAJ..5=DKK ;QEHHQ%  9L"3r2   c                 (    U R                  SSU5      $ )Nim  i  )rL  )r.   r;  s     r/   <lambda>FileOperator.<lambda>A  s    qzz%'Cr2   c                    [         R                  R                  U5      nXR                  ;  a  [         R                  R	                  U5      (       d  U R                  R                  U5        [         R                  R                  U5      u  p#U R                  U5        [        R                  SU-  5        U R                  (       d  [         R                  " U5        U R                  (       a  U R                  R                  U5        g g g g )NzCreating %s)rv   rw   r  r	  r  r  r   r!  r#  r$  r  mkdirr  r  )r   rw   r   r;  s       r/   r!  FileOperator.ensure_dirC  s    wwt$||#BGGNN4,@,@LLT"77==&DAOOAKK,-<<{{!!%%d+  -A#r2   c                    [        X(       + 5      n[        R                  SX5        U R                  (       d  U(       d  U R	                  X5      (       a0  U(       d  S nO&UR                  U5      (       d   eU[        U5      S  n0 nU(       aR  [        [        S5      (       a=  [        U[        R                  5      (       d  [        R                  R                  nXXS'   [        R                  " XWS40 UD6  U R                  U5        U$ )NzByte-compiling %s to %sPycInvalidationModeinvalidation_modeT)r   r#  r$  r  r  rc   ry   r   
py_compiler   rU  CHECKED_HASHcompiler  )	r   rw   optimizeforcer   hashed_invalidationdpathdiagpathcompile_kwargss	            r/   byte_compileFileOperator.byte_compileO  s    !$5-t;||

4//#H??62222#CKL1HN"wz;P'Q'Q!"5z7U7UVV*4*H*H*U*U'6I23tHdMnMu%r2   c                    [         R                  R                  U5      (       Gag  [         R                  R                  U5      (       a  [         R                  R	                  U5      (       d{  [
        R                  SU5        U R                  (       d  [        R                  " U5        U R                  (       a,  XR                  ;   a  U R                  R                  U5        g g g [         R                  R	                  U5      (       a  SnOSn[
        R                  SX!5        U R                  (       d  [         R                  " U5        U R                  (       a,  XR                  ;   a  U R                  R                  U5        g g g g )NzRemoving directory tree at %slinkfilezRemoving %s %s)rv   rw   r  r3  r%  r#  debugr  r	   r   r  r  r  r  )r   rw   r.   s      r/   ensure_removedFileOperator.ensure_removedb  s   77>>$ww}}T""277>>$+?+?<dC||MM$';;000))006 1  77>>$''AA-q7||IIdO;;111**11$7 2 !  r2   c                    SnU(       d~  [         R                  R                  U5      (       a(  [         R                  " U[         R                  5      n U$ [         R                  R                  U5      nX1:X  a   U$ UnU(       d  M~  U$ r  )rv   rw   r  accessW_OKr"  )r   rw   r*   parents       r/   is_writableFileOperator.is_writablew  sq    ww~~d##41
 	 WW__T*F~ D & r2   c                 |    U R                   (       d   eU R                  U R                  4nU R                  5         U$ )z>
Commit recorded changes, turn off recording, return
changes.
)r  r  r  r
  )r   r*   s     r/   commitFileOperator.commit  s7    
 {{{##T%6%66r2   c                    U R                   (       d  [        U R                  5       H?  n[        R                  R                  U5      (       d  M)  [        R                  " U5        MA     [        U R                  SS9nU Hw  n[        R                  " U5      nU(       aA  US/:X  d   e[        R                  R                  X4S   5      n[        R                  " U5        [        R                  " U5        My     U R                  5         g )NT)reverse__pycache__r   )r  listr  rv   rw   r  r  sortedr  listdirr&   rmdirr
  )r   r;  dirsr   flistsds         r/   rollbackFileOperator.rollback  s    ||$,,-77>>!$$IIaL . $++T:D

1 ]O333aq2BHHRL  	r2   )r  r  r	  r  r  FTr   )FFNF)r   r   r   r   r   r
  r  r  r,  r8  r<  r@  rL  set_executable_moder!  r`  rf  rl  ro  r{  r   rH   r2   r/   r  r    sW    
"
)C&("(%<
& D
,&8*
r2   r  c                     U [         R                  ;   a  [         R                  U    nO[        U 5      nUc  UnU$ UR                  S5      n[	        X$R                  S5      5      nU H  n[	        X55      nM     U$ )N.r   )r   modules
__import__r   r   r}   )module_namedotted_pathmodr*   r-   r   s         r/   resolver    su    ckk!kk+&% M	 !!#&iil+AV'F Mr2   c                   N    \ rS rSrS r\S 5       rS rS r\	R                  r
Srg)ExportEntryi  c                 4    Xl         X l        X0l        X@l        g r   r]   r   r   r   )r   r]   r   r   r   s        r/   r   ExportEntry.__init__  s    	
r2   c                 B    [        U R                  U R                  5      $ r   )r  r   r   r  s    r/   r   ExportEntry.value  s    t{{DKK00r2   c           	      x    SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )Nz<ExportEntry r   r   r[   >r  r  s    r/   __repr__ExportEntry.__repr__  s$    04		4;;UYU_U_``r2   c                 *   [        U[        5      (       d  SnU$ U R                  UR                  :H  =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R
                  UR
                  :H  nU$ r  )r   r  r]   r   r   r   )r   otherr*   s      r/   __eq__ExportEntry.__eq__  sz    %--F  ii5::- 0$++2M 0RVR]R]afamamRm 0jjEKK/ r2   )r   r]   r   r   N)r   r   r   r   r   r   r   r  r  r   __hash__r   rH   r2   r/   r  r    s1     1 1a Hr2   r  z(?P<name>([^\[]\S*))
                      \s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
                      \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
                      c                    [         R                  U 5      nU(       d  S nSU ;   d  SU ;   a  [        SU -  5      e U$ UR                  5       nUS   nUS   nUR	                  S5      nUS:X  a  US pO'US:w  a  [        SU -  5      eUR                  S5      u  pxUS	   n	U	c  SU ;   d  SU ;   a  [        SU -  5      e/ n	O.U	R                  S
5       V
s/ s H  oR                  5       PM     n	n
[        XGX5      nU$ s  sn
f )NrM   rN   zInvalid specification '%s'r]   callabler   r   r   r   rO   )ENTRY_REsearchr   	groupdictcountr   rb   r  )specificationr)   r*   r   r]   rw   colonsr   r   r   r;  s              r/   r   r     s,   &A-3-#7" $*,9$: ; ; $80 M) KKMy}CQ;!4F{& (.0=(> ? ?!ZZ_NF'
=m#sm';& (.0=(> ? ?E(-C(89(81WWY(8E9T69M :s   C9c                    U c  Sn [         R                  S:X  a4  S[         R                  ;   a   [         R                  R	                  S5      nO[         R                  R                  S5      n[         R                  R                  U5      (       aC  [         R                  " U[         R                  5      nU(       d  [        R                  SU5        O [         R                  " U5        SnU(       d+  [        R                  " 5       n[        R                  SU5        [         R                  R                  X5      $ ! [         a    [        R                  SUSS	9  S
n Ntf = f)az  
Return the default base location for distlib caches. If the directory does
not exist, it is created. Use the suffix provided for the base directory,
and default to '.distlib' if it isn't provided.

On Windows, if LOCALAPPDATA is defined in the environment, then it is
assumed to be a directory, and will be the parent directory of the result.
On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home
directory - using os.expanduser('~') - will be the parent directory of
the result.

The result is just the directory '.distlib' in the parent directory as
determined above, or with the name specified with ``suffix``.
z.distlibntLOCALAPPDATAz$localappdata~z(Directory exists but is not writable: %sTzUnable to create %s)exc_infoFz#Default location unusable, using %s)rv   r]   environrw   
expandvars
expanduserr3  ri  rj  r#  warningmakedirsOSErrorr   r   r&   )r   r*   usables      r/   get_cache_baser    s     ~	ww$>RZZ7##O4 ##C( 
ww}}V6277+NNEvN	KKF !!#<fE77<<''  	NN0&4NHF	s   D> >!E"!E"c                    [         R                  R                  U(       a  [         R                  R                  U 5      OU 5      u  p#U(       a  UR	                  SS5      nUR	                  [         R
                  S5      nX#-   S-   $ )z
Convert an absolute path to a directory name for use in a cache.

The algorithm used is:

#. On Windows, any ``':'`` in the drive is replaced with ``'---'``.
#. Any occurrence of ``os.sep`` is replaced with ``'--'``.
#. ``'.cache'`` is appended.
r   z---z--z.cache)rv   rw   
splitdriver  r#   rx   )rw   use_abspathr   r   s       r/   path_to_cache_dirr    s_     77{bggood3MDAIIc5!			"&&$A58r2   c                 <    U R                  S5      (       d  U S-   $ U $ rt   )endswith)r.   s    r/   ensure_slashr  )  s    ::c??3wHr2   c                     S =pSU ;   a1  U R                  SS5      u  p0SU;  a  UnOUR                  SS5      u  pU(       a  [        U5      nU(       a  [        U5      nXU 4$ )NrP   r   r   )rsplitr   r   )rg   usernamepasswordr   s       r/   parse_credentialsr  /  sh    H
f}sA.fH!'c1!5H8$8$v%%r2   c                  ^    [         R                  " S5      n [         R                  " U 5        U $ )N   )rv   umaskr   s    r/   get_process_umaskr  >  s     XXd^FHHVMr2   c                 r    SnS n[        U 5       H  u  p#[        U[        5      (       a  M  Sn  O   Uc   eU$ )NTF)	enumerater   r   )seqr*   rl   r.   s       r/   is_string_sequencer  D  sB    FA#!\**F  ==Mr2   z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z-py(\d\.?\d?)c                 0   SnSn[        U 5      R                  SS5      n [        R                  U 5      nU(       a$  UR	                  S5      nU SUR                  5        n U(       am  [        U 5      [        U5      S-   :  aR  [        R                  " [        R                  " U5      S-   U 5      nU(       a  UR                  5       nU SU XS-   S U4nUc?  [        R                  U 5      nU(       a#  UR	                  S5      UR	                  S5      U4nU$ )zk
Extract name, version, python version from a filename (no extension)

Return name, version, pyver or None
Nr[   -r   z\br   )r   r#   PYTHON_VERSIONr  r   startry   rer   escaper!   PROJECT_NAME_AND_VERSION)filenameproject_namer*   pyverr)   ns         r/   split_filenamer  T  s     FEx ((c2Hh'A
JQWWY'HL(9A(==HHRYY|,u4h?Abq\8EF#3U:F~$**84WWQZU2FMr2   z-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$c                     [         R                  U 5      nU(       d  [        SU -  5      eUR                  5       nUS   R	                  5       R                  5       US   4$ )z
A utility method used to get name and version from a string.

From e.g. a Provides-Dist value.

:param p: A value in a form 'foo (1.0)'
:return: The name and version as a tuple.
z$Ill-formed name/version string: '%s'r]   ver)NAME_VERSION_REr   r   r  rb   r   )r   r)   r   s      r/   parse_name_and_versionr  r  sV     	a AG!KLL	AV9??""$ah..r2   c                    [        5       n[        U =(       d    / 5      n [        U=(       d    / 5      nSU ;   a  U R                  S5        X!-  nU  H  nUS:X  a  UR                  U5        M  UR                  S5      (       a<  USS  nXA;  a  [        R                  SU-  5        XB;   a  UR                  U5        Ml  Mn  X1;  a  [        R                  SU-  5        UR                  U5        M     U$ )N*r  r   zundeclared extra: %s)r   r  r  rc   r#  r  )	requested	availabler*   runwanteds        r/   
get_extrasr    s    UFIO$IIO$I
i8JJqM\\#uH(5@A!h' " !59:JJqM  Mr2   c                    0 n [        U 5      nUR                  5       nUR                  S5      nUR                  S5      (       d  [        R                  SU5        U$ [        R                  " S5      " U5      n[        R                  " U5      n U$ ! [         a!  n[        R                  SX5         S nAU$ S nAff = f)NzContent-Typezapplication/jsonz(Unexpected response for JSON request: %sr   z&Failed to get external data for %s: %s)r   r$  getrc   r#  re  r   r   r   r   r   	exception)r`   r*   respheadersctreaderes          r/   _get_external_datar    s    FK s|))+[[(}}/00LLCRH M %%g.t4F YYv&F M  KA3JJMKs   AB 2B 
B>B99B>z'https://www.red-dove.com/pypi/projects/c                 r    U S   R                  5       < SU < S3n[        [        U5      n[        U5      nU$ )Nr   ru   z/project.jsonupperr   _external_data_base_urlr  )r]   r`   r*   s      r/   get_project_datar    s2    "&q'--/4
8C
)3
/C$FMr2   c                 v    U S   R                  5       < SU < SU< S3n[        [        U5      n[        U5      $ )Nr   ru   z	/package-z.jsonr  )r]   versionr`   s      r/   get_package_datar    s0    %)!W]]_dG
DC
)3
/Cc""r2   c                   .    \ rS rSrSrS rSS jrS rSrg)	Cachei  z
A class implementing a cache for resources that need to live in the file system
e.g. shared libraries. This class was moved from resources to here because it
could be used by other modules, e.g. the wheel module.
c                 t   [         R                  R                  U5      (       d  [         R                  " U5        [         R                  " U5      R
                  S-  S:w  a  [        R                  SU5        [         R                  R                  [         R                  R                  U5      5      U l
        g)z]
Initialise an instance.

:param base: The base directory where the cache should be located.
?   r   zDirectory '%s' is not privateN)rv   rw   r3  r  r  rF  r#  r  r  normpathr   )r   r   s     r/   r   Cache.__init__  sp     ww}}T""KKGGDM!!D(Q.NN<dCGGOOBGG$4$4T$:;	r2   c                     [        XS9$ )z>
Converts a resource prefix to a directory name in the cache.
)r  )r  )r   r   r  s      r/   prefix_to_dirCache.prefix_to_dir  s     !AAr2   c                 *   / n[         R                  " U R                  5       H  n[         R                  R	                  U R                  U5      n [         R                  R                  U5      (       d$  [         R                  R                  U5      (       a  [         R                  " U5        M  [         R                  R                  U5      (       a  [        R                  " U5        M  M     U$ ! [         a    UR                  U5         M  f = f)z
Clear the cache.
)rv   rv  r   rw   r&   r%  r&  r  r3  r	   r   r   r$   )r   not_removedfns      r/   clearCache.clear  s     **TYY'Bdii,B'77>>"%%););IIbMWW]]2&&MM"% ' (   '""2&'s   AC31:C33DDr   Nr~  )	r   r   r   r   __doc__r   r  r  r   rH   r2   r/   r  r    s    <Br2   r  c                   :    \ rS rSrSrS rS
S jrS rS rS r	Sr
g	)
EventMixini  z)
A very simple publish/subscribe system.
c                     0 U l         g r   _subscribersr  s    r/   r   EventMixin.__init__  s
    r2   c                     U R                   nX;  a  [        U/5      XA'   gXA   nU(       a  UR                  U5        gUR                  U5        g)a(  
Add a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be added (and called when the
                   event is published).
:param append: Whether to append or prepend the subscriber to an
               existing subscriber list for the event.
N)r  r   r$   
appendleft)r   event
subscriberr$   subssqs         r/   r  EventMixin.add  sE       -DKB		*%j)r2   c                 h    U R                   nX;  a  [        SU-  5      eX1   R                  U5        g)zy
Remove a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be removed.
zNo subscribers: %rN)r  r   r  )r   r  r  r  s       r/   r  EventMixin.remove  s6       1E9:::&r2   c                 L    [        U R                  R                  US5      5      $ )zi
Return an iterator for the subscribers for an event.
:param event: The event to return subscribers for.
rH   )iterr  r  )r   r  s     r/   get_subscribersEventMixin.get_subscribers  s"    
 D%%))%455r2   c                     / nU R                  U5       H!  n U" U/UQ70 UD6nUR	                  U5        M#     [        R                  SXX45        U$ ! [         a    [        R                  S5        Sn NQf = f)a  
Publish a event and return a list of values returned by its
subscribers.

:param event: The event to publish.
:param args: The positional arguments to pass to the event's
             subscribers.
:param kwargs: The keyword arguments to pass to the event's
               subscribers.
z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)r
  r   r#  r  r$   re  )r   r  argskwargsr*   r  r   s          r/   publishEventMixin.publish  s     ..u5J"5:4:6: MM%  6 	FU[d    !EFs   A!A65A6r  Nr~  )r   r   r   r   r  r   r  r  r
  r  r   rH   r2   r/   r  r    s     *(
'6r2   r  c                   b    \ rS rSrS rS rSS jrS rS rS r	S r
\S	 5       r\S
 5       rSrg)	Sequenceri8  c                 >    0 U l         0 U l        [        5       U l        g r   )_preds_succsr   _nodesr  s    r/   r   Sequencer.__init__:  s    er2   c                 :    U R                   R                  U5        g r   )r  r  )r   nodes     r/   add_nodeSequencer.add_node?  s    r2   c                 d   XR                   ;   a  U R                   R                  U5        U(       a  [        U R                  R	                  US5      5       H  nU R                  X15        M     [        U R
                  R	                  US5      5       H  nU R                  X5        M     [        U R                  R                  5       5       H  u  pVU(       a  M  U R                  U	 M     [        U R
                  R                  5       5       H  u  pVU(       a  M  U R
                  U	 M     g g )NrH   )r  r  r   r  r  r  rt  r   )r   r  edgesr   r.   r   rW   s          r/   remove_nodeSequencer.remove_nodeB  s    ;;KKt$r23A$ 4r23D$ 4 T[[..01qA 2 T[[..01qA 2 r2   c                     X:w  d   eU R                   R                  U[        5       5      R                  U5        U R                  R                  U[        5       5      R                  U5        g r   )r  
setdefaultr   r  r  )r   predsuccs      r/   r  Sequencer.addR  sN    ||tSU+//5tSU+//5r2   c                    X:w  d   e U R                   U   nU R                  U   n UR	                  U5        UR	                  U5        g ! [         a    [        SU-  5      ef = f! [         a    [        U< SU< 35      ef = f)Nz%r not a successor of anythingz not a successor of )r  r  KeyErrorr   r  )r   r"  r#  predssuccss        r/   r  Sequencer.removeW  s    ||	FKK%EKK%E	HLLLL	  	F=DEE	F
  	H4FGG	Hs   A "A' A$'Bc                 r    XR                   ;   =(       d#    XR                  ;   =(       d    XR                  ;   $ r   )r  r  r  )r   steps     r/   is_stepSequencer.is_stepd  s'    #Qt{{':Qdkk>QRr2   c                    U R                  U5      (       d  [        SU-  5      e/ n/ n[        5       nUR                  U5        U(       a  UR	                  S5      nXT;   a(  XQ:w  a"  UR                  U5        UR                  U5        OOUR                  U5        UR                  U5        U R                  R                  US5      nUR                  U5        U(       a  M  [        U5      $ )NzUnknown: %rr   rH   )r,  r   r   r$   r}   r  r  r  r  extendreversed)r   finalr*   todoseenr+  r'  s          r/   	get_stepsSequencer.get_stepsg  s    ||E""]U233uE88A;D| =MM$'MM$'d#b1E" d  r2   c                    ^^^^^^^ S/m/ m0 m0 m/ mU R                   mUUUUUUU4S jmT H  nUT;  d  M  T" U5        M     T$ )Nr   c                   > TS   TU '   TS   TU '   TS==   S-  ss'   T
R                  U 5         TU    nU HE  nUT;  a  T" U5        [        TU    TU   5      TU '   M(  UT
;   d  M0  [        TU    TU   5      TU '   MG     TU    TU    :X  aI  / n T
R                  5       nUR                  U5        X :X  a  OM)  [	        U5      nT	R                  U5        g g ! [         a    / n Nf = fNr   r   )r$   r   minr}   tuple)r  
successors	successorconnected_component	componentgraphindexindex_counterlowlinksr*   stackstrongconnects        r/   rD  3Sequencer.strong_connections.<locals>.strongconnect  s   '*E$K*1-HTN!!LL "4[
 (	H,!),%($)9L%MHTN%' &)$y9I%JHTN ( ~t,&(# %		I'..y9 (	 
 ""56	i( -   
 s   C C&%C&)r  )	r   r  r?  r@  rA  rB  r*   rC  rD  s	     @@@@@@@r/   strong_connectionsSequencer.strong_connections  sW     !	) !	)F D8#d#  r2   c           	      $   S/nU R                    H5  nU R                   U   nU H  nUR                  SU< SU< S35        M     M7     U R                   H  nUR                  SU-  5        M     UR                  S5        SR                  U5      $ )Nzdigraph G {z  z -> rZ   z  %s;}
)r  r$   r  r&   )r   r*   r#  r'  r"  r  s         r/   dotSequencer.dot  s{    KKDKK%EtT:;    KKDMM'D.)  cyy  r2   )r  r  r  Nr}  )r   r   r   r   r   r  r  r  r  r,  r4  propertyrF  rK  r   rH   r2   r/   r  r  8  sP    
' 6
HS 2 1 1f 	! 	!r2   r  ).tar.gz.tar.bz2.tar.zip.tgz.tbz.whlc                   ^^ UU4S jn[         R                  R                  T5      m[        T5      mS nUcx  U R	                  S5      (       a  SnO_U R	                  S5      (       a  SnSnODU R	                  S5      (       a  SnS	nO)U R	                  S
5      (       a  SnSnO[        SU -  5      e US:X  a5  [        U S5      nU(       a!  UR                  5       nU H  nU" U5        M     O?[        R                  " U W5      nU(       a!  UR                  5       nU H  nU" U5        M     US:w  ao  [        R                  S   S:  aX  UR                  5        HD  n	[        U	R                  [         5      (       a  M$  U	R                  R#                  S5      U	l        MF     S n
Xl        UR'                  T5        U(       a  UR)                  5         g g ! U(       a  UR)                  5         f f = f)Nc                 B  > [        U [        5      (       d  U R                  S5      n [        R                  R                  [        R                  R                  TU 5      5      nUR                  T5      (       a  UT   [        R                  :w  a  [        SU-  5      eg )Nr   zpath outside destination: %r)
r   r   decoderv   rw   r  r&   rc   rx   r   )rw   r   dest_dirplens     r/   
check_pathunarchive.<locals>.check_path  ss    $	**;;w'DGGOOBGGLL489||H%%4BFF):;a?@@ *;r2   )rQ  rT  zip)rN  rR  tgzzr:gz)rO  rS  tbzzr:bz2rP  tarr  zUnknown format for %rr   r   r   c                      [         R                  " X5      $ ! [         R                   a  n[        [	        U5      5      eSnAff = f)z9Run tarfile.tar_filter, but raise the expected ValueErrorN)tarfile
tar_filterFilterErrorr   str)memberrw   excs      r/   extraction_filter$unarchive.<locals>.extraction_filter  s=    +))&77&& + S**+s    AA  A)rv   rw   r  ry   r  r   r   namelistra  r4  getnamesr   r   
getmembersr   r]   r   rW  rg  
extractallr   )archive_filenamerX  formatr*  rZ  archiverK  namesr]   tarinforg  rY  s    `         @r/   	unarchiverr    s   A wwx(Hx=DG~$$%566F&&':;;FD&&';<<FD&&v..FD47GGHH'U?.4G((*!Dt$ " ll#3T:G((*!Dt$ "U?s//2Q6
 #--/!',,	::#*<<#6#6w#?GL 0	+ %6!8$ MMO 7MMO s   2CG =>G G.c                    [         R                  " 5       n[        U 5      n[        US5       n[        R
                  " U 5       Hb  u  pEnU HV  n[        R                  R                  XG5      nXBS n	[        R                  R                  X5      n
UR                  X5        MX     Md     SSS5        U$ ! , (       d  f       U$ = f)z*zip a directory tree into a BytesIO objectr0  N)	ioBytesIOry   r   rv   walkrw   r&   r   )	directoryr*   dlenzfrz   rx  rJ  r]   fullrelr   s              r/   zip_dirr|    s    ZZ\Fy>D		!#!3Dww||D/5kww||C.$	  "4 
 M 
	 Ms   A=B44
C)r   KMGTPc                       \ rS rSrSrSS jrS rS rS rS r	\
S 5       r\
S	 5       rS
 r\
S 5       r\
S 5       rSrg)Progressi!  UNKNOWNc                 j    Ub  X!:  d   eU=U l         U l        X l        S U l        SU l        SU l        g )Nr   F)r9  curmaxstartedelapseddone)r   minvalmaxvals      r/   r   Progress.__init__$  s:    ~!111$$48	r2   c                     U R                   U::  d   eU R                  b  XR                  ::  d   eXl        [        R                  " 5       nU R                  c  X l        g X R                  -
  U l        g r   )r9  r  r  timer  r  )r   curvalnows      r/   updateProgress.update,  sZ    xx6!!!xx6XX#555iik<<L-DLr2   c                 P    US:  d   eU R                  U R                  U-   5        g )Nr   )r  r  )r   incrs     r/   	incrementProgress.increment6  s"    qyyDHHtO$r2   c                 <    U R                  U R                  5        U $ r   )r  r9  r  s    r/   r  Progress.start:  s    DHHr2   c                 b    U R                   b  U R                  U R                   5        SU l        g NT)r  r  r  r  s    r/   stopProgress.stop>  s#    88KK!	r2   c                 L    U R                   c  U R                  $ U R                   $ r   )r  unknownr  s    r/   maximumProgress.maximumC  s    #xx/t||=TXX=r2   c                     U R                   (       a  SnU$ U R                  c  SnU$ SU R                  U R                  -
  -  U R                  U R                  -
  -  nSU-  nU$ )Nz100 %z ?? %g      Y@z%3d %%)r  r  r  r9  )r   r*   rW   s      r/   
percentageProgress.percentageG  sf    99F  XXF  DHH,-DHH1DEA\Fr2   c                     US::  a  U R                   b  U R                  U R                  :X  a  SnU$ [        R                  " S[        R
                  " U5      5      nU$ )Nr   z??:??:??z%H:%M:%S)r  r  r9  r  strftimegmtime)r   durationr*   s      r/   format_durationProgress.format_durationR  sM    Mtxx/488txx3GF
  ]]:t{{8/DEFr2   c                    U R                   (       a  SnU R                  nOSnU R                  c  SnO|U R                  S:X  d  U R                  U R                  :X  a  SnOO[        U R                  U R                  -
  5      nX R                  U R                  -
  -  nUS-
  U R                  -  nU< SU R                  U5      < 3$ )NDonezETA r   r   r   z: )r  r  r  r  r9  floatr  )r   r   rm   s      r/   ETAProgress.ETA[  s    99FA Fxx"txx488'; $((TXX-.XX((Udll*!4#7#7#:;;r2   c                     U R                   S:X  a  SnO&U R                  U R                  -
  U R                   -  n[         H  nUS:  a    O	US-  nM     SUW4-  $ )Nr   g        i  g     @@z%d %sB/s)r  r  r9  UNITS)r   r*   units      r/   speedProgress.speedn  s]    <<1Fhh)T\\9FD}fF  VTN**r2   )r  r  r  r  r9  r  N)r   d   )r   r   r   r   r  r   r  r  r  r  rM  r  r  r  r  r  r   rH   r2   r/   r  r  !  su    G.%
 > >   < <$ 	+ 	+r2   r  z\{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$c                     [         R                  U 5      (       a  Sn[        X-  5      e[        R                  U 5      (       a  Sn[        X-  5      e[	        U 5      $ )zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')_CHECK_RECURSIVE_GLOBr  r   _CHECK_MISMATCH_SET_iglob)	path_globr+  s     r/   r   r     sS    ##I..K))!!),,F)))r2   c              #     #    [         R                  U S5      n[        U5      S:  a[  [        U5      S:X  d   U5       eUu  p#nUR                  S5       H*  n[        SR	                  X%U45      5       H  nUv   M	     M,     g SU ;  a  [        U 5       H  nUv   M	     g U R                  SS5      u  p'US:X  a  SnUS:X  a  SnO"UR                  S5      nUR                  S	5      n[        R                  " U5       HX  u  phn	[        R                  R                  U5      n[        [        R                  R	                  Xg5      5       H  n
U
v   M	     MZ     g 7f)
Nr   r   rO   r   z**r  r  ru   \)	RICH_GLOBr   ry   r  r&   	std_iglobr'   rv   rv  rw   r  )r  rich_path_globr   r   r   itemrw   radicaldirrJ  r  s              r/   r  r    s-    __Y2N
>Q>"a'77',VIIcNDrwwf'=>?
 @ # y !),
 - (oodA6OF|"} "..-!...$&GGFO 5ww''- d!<=BH > %4s   EE)HTTPSHandlermatch_hostnameCertificateErrorc                   "    \ rS rSrSrSrS rSrg)HTTPSConnectioni  NTc                 p   [         R                  " U R                  U R                  4U R                  5      n[        U SS5      (       a  Xl        U R                  5         [        R                  " [        R                  5      n[        [        S5      (       a#  U=R                  [        R                  -  sl        [        U SS 5      (       a&  UR                  U R                  U R                   5        0 nU R"                  (       aS  [        R$                  Ul        UR)                  U R"                  S9  [        [        SS5      (       a  U R                  US'   UR*                  " U40 UD6U l        U R"                  (       ab  U R,                  (       aP   [/        U R                  R1                  5       U R                  5        [2        R5                  SU R                  5        g g g ! [6         aE    U R                  R9                  [         R:                  5        U R                  R=                  5         e f = f)	N_tunnel_hostFOP_NO_SSLv2	cert_file)cafileHAS_SNIserver_hostnamezHost verified: %s)r   create_connectionhostporttimeoutr   sock_tunnelssl
SSLContextPROTOCOL_SSLv23r   optionsr  load_cert_chainr  key_fileca_certsCERT_REQUIREDverify_modeload_verify_locationswrap_socketcheck_domainr  getpeercertr#  re  r  shutdown	SHUT_RDWRr   )r   r  contextr  s       r/   connectHTTPSConnection.connect  s   ++TYY		,BDLLQDt^U33 	nnS%8%89GsM**3??2t[$//''FF}}&)&7&7#--T]]-C3	51104		F,-++D;F;DI}}!2!2"499#8#8#:DIIFLL!4dii@ "3} ( II&&v'7'78IIOO%s   AG& &AH5)r  )r   r   r   r   r  r  r  r   rH   r2   r/   r  r    s    	r2   r  c                   *    \ rS rSrSS jrS rS rSrg)r  i  c                 H    [         R                  " U 5        Xl        X l        g r   )BaseHTTPSHandlerr   r  r  )r   r  r  s      r/   r   HTTPSHandler.__init__  s    %%d+$M ,r2   c                     [        U0 UD6nU R                  (       a"  U R                  Ul        U R                  Ul        U$ )a  
This is called to create a connection instance. Normally you'd
pass a connection class to do_open, but it doesn't actually check for
a class, and just expects a callable. As long as we behave just as a
constructor would have, we should be OK. If it ever changes so that
we *must* pass a class, we'll create an UnsafeHTTPSConnection class
which just sets check_domain to False in the class definition, and
choose which one to pass to do_open.
)r  r  r  )r   r  r  r*   s       r/   _conn_makerHTTPSHandler._conn_maker  s8     %d5f5F}}"&--&*&7&7#Mr2   c                      U R                  U R                  U5      $ ! [         a7  nS[        UR                  5      ;   a  [        SUR                  -  5      ee S nAff = f)Nzcertificate verify failedz*Unable to verify server certificate for %s)do_openr  r   rd  reasonr  r  )r   rh   r  s      r/   
https_openHTTPSHandler.https_open  sc    ||D$4$4c:: .#ahh-?* ,469hh,? @ @ s    
A2AA)r  r  Nr~  )r   r   r   r   r   r  r  r   rH   r2   r/   r  r    s    	-
	 	r2   r  c                       \ rS rSrS rSrg)HTTPSOnlyHandleri  c                     [        SU-  5      e)NzAUnexpected HTTP request on what should be a secure connection: %s)r   )r   rh   s     r/   	http_openHTTPSOnlyHandler.http_open  s     ,.12 3 3r2   rH   N)r   r   r   r   r  r   rH   r2   r/   r  r    s    	3r2   r  c                   $    \ rS rSrSS jrS rSrg)	Transporti  c                 N    Xl         [        R                  R                  X5        g r   )r  r   r  r   r   r  use_datetimes      r/   r   Transport.__init__	  s    $$T8r2   c                     U R                  U5      u  p#nU R                  (       a  XR                  S   :w  a#  X0l        U[        R                  " U5      4U l        U R                  S   $ r8  )get_host_info_connection_extra_headersr   HTTPConnection)r   r  hehx509s        r/   make_connectionTransport.make_connection  s^    ((.t4+;+;A+>#>"$#W%;%;A%>>D""r2   r   r  r  Nr   r   r   r   r   r   r  r   rH   r2   r/   r  r    s    9#r2   r  c                   $    \ rS rSrSS jrS rSrg)SafeTransporti  c                 N    Xl         [        R                  R                  X5        g r   )r  r   r  r   r  s      r/   r   SafeTransport.__init__  s    "L##,,T@r2   c                    U R                  U5      u  p#nU(       d  0 nU R                  US'   U R                  (       a  XR                  S   :w  a%  X0l        U[        R
                  " US 40 UD64U l        U R                  S   $ )Nr  r   r   )r  r  r   r  r   r  )r   r  r  r  r  s        r/   r  SafeTransport.make_connection  s{     ..t4MA6 $F9##t/?/?/B'B&(##')@)@D)SF)S#S ##A&&r2   r  Nr	  r
  rH   r2   r/   r  r    s    	A	'r2   r  c                       \ rS rSrS rSrg)ServerProxyi(  c                    UR                  SS 5      =U l        nUbD  [        U5      S   nUR                  SS5      nUS:X  a  [        nO[
        nU" X5S9=US'   nXpl        [        R                  R                  " X40 UD6  g )Nr  r   r  https)r  	transport)
r}   r  r   r  r  r  r  r   r  r   )r   rk   r  r  rf   r  tclsrm   s           r/   r   ServerProxy.__init__*  s    !'It!<<w c]1%F!::na8L $ &*7&NNF;!N&&t;F;r2   )r  r  N)r   r   r   r   r   r   rH   r2   r/   r  r  (  s    <r2   r  c                 h    [         R                  S   S:  a  US-  nO
SUS'   SUS'   [        X40 UD6$ )Nr   r   br   newliner   r2  )r   r   r4  )r  rK  r  s      r/   	_csv_openr  A  sD    
Qy %z#F##r2   c                   P    \ rS rSr\" S5      \" S5      \" S5      S.rS rS rSrg	)
CSVBaseiL  rO   "rJ  )	delimiter	quotecharlineterminatorc                     U $ r   rH   r  s    r/   	__enter__CSVBase.__enter__S      r2   c                 8    U R                   R                  5         g r   )r   r   )r   r  s     r/   __exit__CSVBase.__exit__V  s    r2   rH   N)	r   r   r   r   rd  defaultsr#  r'  r   rH   r2   r/   r  r  L  s(    XXd)Hr2   r  c                   *    \ rS rSrS rS rS r\rSrg)	CSVReaderiZ  c                    SU;   a?  US   n[         R                  S   S:  a  [        R                  " S5      " U5      nX l        O[        US   S5      U l        [        R                  " U R                  40 U R                  D6U l        g )Nr   r   r   r   rw   r  )	r   r   r   r   r   r  csvr  r)  )r   r  r   s      r/   r   CSVReader.__init__\  sp    vH%F"a'))'26: K#F6NC8DKjj>>r2   c                     U $ r   rH   r  s    r/   __iter__CSVReader.__iter__g  r%  r2   c                     [        U R                  5      n[        R                  S   S:  a>  [	        U5       H/  u  p#[        U[        5      (       a  M  UR                  S5      X'   M1     U$ Nr   r   r   )nextr  r   r   r  r   r   rW  )r   r*   rl   r  s       r/   r4  CSVReader.nextj  sX    dkk"A"$V,!$	22 $G 4FI - r2   )r  r   N)	r   r   r   r   r   r0  r4  __next__r   rH   r2   r/   r+  r+  Z  s    	? Hr2   r+  c                        \ rS rSrS rS rSrg)	CSVWriteriu  c                     [        US5      U l        [        R                  " U R                  40 U R                  D6U l        g )Nr0  )r  r   r-  writerr)  )r   r  r  s      r/   r   CSVWriter.__init__w  s-    C(jj>>r2   c                     [         R                  S   S:  aD  / nU H:  n[        U[        5      (       a  UR	                  S5      nUR                  U5        M<     UnU R                  R                  U5        g r3  )r   r   r   r   r?  r$   r:  writerow)r   rowr  r  s       r/   r=  CSVWriter.writerow{  sc    A"AdI..;;w/D  CS!r2   )r   r:  N)r   r   r   r   r   r=  r   rH   r2   r/   r8  r8  u  s    ?"r2   r8  c                   l   ^  \ rS rSr\" \R                  5      rS\S'   S	U 4S jjrS rS r	S r
SrU =r$ )
Configuratori  inc_convertincc                 r   > [         [        U ]  U5        U=(       d    [        R                  " 5       U l        g r   )superrA  r   rv   r   r   )r   configr   	__class__s      r/   r   Configurator.__init__  s$    lD*62'BIIK	r2   c                   ^ ^ UU 4S jmUR                  S5      n[        U5      (       d  T R                  U5      nUR                  SS 5      nUR                  SS5      nU(       a"  [        U Vs/ s H  nT" U5      PM     sn5      nU Vs/ s H!  n[	        U5      (       d  M  UT" X   5      4PM#     nn[        U5      nU" U0 UD6n	U(       a+  UR                  5        H  u  p[        XT" U5      5        M     U	$ s  snf s  snf )Nc                 N  > [        U [        [        45      (       a*  [        U 5      " U  Vs/ s H  nT" U5      PM     sn5      nU$ [        U [        5      (       a3  SU ;   a  TR                  U 5      nU$ 0 nU  H  nT" X   5      X#'   M      U$ TR                  U 5      nU$ s  snf N())r   rt  r:  typedictconfigure_customconvert)orl   r*   r   rP  r   s       r/   rP  .Configurator.configure_custom.<locals>.convert  s    !dE]++aa!8a'!*a!89 M At$$19!2215F M  F$+ADM	  M aM "9s   B"rL  r  z[]rH   )r}   r  r  r:  r   rN  r   setattr)r   rF  r   propsr  rQ  r   r   r  r*   r  rW   rP  s   `           @r/   rO  Configurator.configure_custom  s    	 JJt{{QA

3%zz$#d3d'!*d34D28K&QKN(!WVY'(&KeD#F#71:. & 4Ks   0C>D%Dc                     U R                   U   n[        U[        5      (       a&  SU;   a   U R                  U5      =U R                   U'   nU$ rK  )rF  r   rN  rO  )r   r   r*   s      r/   __getitem__Configurator.__getitem__  sF    S!fd##(,(=(=f(EEDKKvr2   c                 0   [         R                  R                  U5      (       d*  [         R                  R                  U R                  U5      n[
        R                  " USSS9 n[        R                  " U5      nSSS5        U$ ! , (       d  f       W$ = f)z*Default converter for the inc:// protocol.r  r   r1  N)	rv   rw   isabsr&   r   r   r4  r   r   )r   r   r;  r*   s       r/   rB  Configurator.inc_convert  sd    ww}}U##GGLLE2E[[g6!YYq\F 7 76s   %B
Br  r   )r   r   r   r   rN  r   value_convertersr   rO  rW  rB  r   __classcell__)rG  s   @r/   rA  rA    s:    ,==>+U(@ r2   rA  c                   .    \ rS rSrSrSS jrS rS rSrg)	SubprocessMixini  z;
Mixin for running subprocesses and capturing their output
Nc                     Xl         X l        g r   )verboseprogress)r   ra  rb  s      r/   r   SubprocessMixin.__init__  s     r2   c                    U R                   nU R                  n UR                  5       nU(       d  OUb	  U" XR5        OsU(       d   [        R                  R                  S5        O.[        R                  R                  UR                  S5      5        [        R                  R                  5         M  UR                  5         g)z
Read lines from a subprocess' output stream and either pass to a progress
callable (if specified) or write progress information to sys.stderr.
Nr  r   )	rb  ra  readliner   stderrr   rW  flushr   )r   r   r  rb  ra  r.   s         r/   r  SubprocessMixin.reader  s    
 ==,,!A#$JJ$$S)JJ$$QXXg%67

  "  	r2   c                 `   [         R                  " U4[         R                  [         R                  S.UD6n[        R                  " U R
                  UR                  S4S9nUR                  5         [        R                  " U R
                  UR                  S4S9nUR                  5         UR                  5         UR                  5         UR                  5         U R                  b  U R                  SS5        U$ U R                  (       a  [        R                  R                  S5        U$ )N)stdoutrf  rj  )r  r  rf  zdone.mainzdone.
)
subprocessPopenPIPE	threadingThreadr  rj  r  rf  waitr&   rb  ra  r   r   )r   cmdr  r   t1t2s         r/   run_commandSubprocessMixin.run_command  s    S[[TZ[T[[(7KL

T[[(7KL

	
	
	==$MM'6*  \\JJY'r2   )rb  ra  )FN)	r   r   r   r   r  r   r  ru  r   rH   r2   r/   r_  r_    s    !*r2   r_  c                 N    [         R                  " SSU 5      R                  5       $ )z,Normalize a python package name a la PEP 503z[-_.]+r  )r  subr   )r]   s    r/   normalize_namery    s      66(C&,,..r2   c                   2    \ rS rSrSrSrS	S jrS rS rSr	g)

PyPIRCFilei  zhttps://upload.pypi.org/legacy/pypiNc                     Uc=  [         R                  R                  [         R                  R                  S5      S5      nXl        X l        g )Nr  z.pypirc)rv   rw   r&   r  r  r`   )r   r  r`   s      r/   r   PyPIRCFile.__init__  s4    :bgg005yABr2   c                 `   0 n[         R                  R                  U R                  5      (       Ga  U R                  =(       d    U R
                  n[        R                  " 5       nUR                  U R                  5        UR                  5       nSU;   Ga!  UR                  SS5      nUR                  S5       Vs/ s H(  ofR                  5       S:w  d  M  UR                  5       PM*     nnU/ :X  a  SU;   a  S/nU$ U H  nSU0nUR                  US5      US'   SU R
                  4S	U R                  4S
4 H4  u  pUR                  Xh5      (       a  UR                  Xh5      X'   M0  XU'   M6     US:X  a"  X R
                  S4;   a  U R
                  US'   M  US   U:w  d  M  US   U:w  d  M  0 nM      U$ SU;   aj  SnUR                  US5      (       a  UR                  US5      nOU R
                  nUR                  US5      UR                  US5      UUU R                  S.nU$ s  snf )N	distutilszindex-serversrJ  r   r|  serverr  
repositoryrealm)r  Nzserver-loginr  )r  r  r  r  r  )rv   rw   r  r  r`   DEFAULT_REPOSITORYr   RawConfigParserr   r   r  r   rb   DEFAULT_REALM
has_option)
r   r*   r  rF  r   index_serversr  _serversr   r   s
             r/   r   PyPIRCFile.read  s   77>>$--((<T%<%<J!113FKK&(Hh& &

; H9F9L9LT9Rk9RvVbVbVdhjVjNFLLN9Rkr>)$*8F C #+"*F!3-3ZZ
-Kz* /;D<S<S-TW^`d`r`rVs-?-ALC%00==.4jj.E.5s-A #f,@W@WY_?`1`373J3JF<0$X.*<AUYcAc%'F% #+B   8+'$$V\::!'FL!AJ!%!8!8J &

6: > &

6: >",$!// O ls   =H+H+c                 p   [         R                  " 5       nU R                  nUR                  U5        UR	                  S5      (       d  UR                  S5        UR                  SSU5        UR                  SSU5        [        US5       nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nr|  r  r  r0  )	r   r  r  r   has_sectionr   r   r4  r   )r   r  r  rF  r  r;  s         r/   r  PyPIRCFile.updateB  s    --/]]B!!&))v&

6:x0

6:x0"c]aLLO ]]s   B''
B5)r  r`   NN)
r   r   r   r   r  r  r   r   r  r   rH   r2   r/   r{  r{    s    :M3j
r2   r{  c                 D    [        U R                  S9R                  5       $ )z?
Read the PyPI access configuration as supported by distutils.
)r`   )r{  r`   r   r@  s    r/   _load_pypircr  O  s     %))$))++r2   c                 `    [        5       R                  U R                  U R                  5        g r   )r{  r  r  r  r  s    r/   _store_pypircr  V  s    L7r2   c                     [         R                  S:X  ay  S[        R                  R	                  5       ;   a  gS[        R                  R	                  5       ;   a  gS[        R                  R	                  5       ;   a  g[        R
                  $ S[         R                  ;   a  [         R                  S   $ [         R                  S	:w  d  [        [         S
5      (       d  [        R
                  $ [         R                  " 5       u  pp#nU R	                  5       R                  SS5      n UR                  SS5      R                  SS5      nU SS S:X  a	  U < SU< 3$ U SS S:X  aC  US   S:  a9  Sn S[        US   5      S-
  USS 4-  nSSS.nUSU[        R                     -  -  nOU SS S:X  a  SSKJn  U" 5       $ U SS  S!:X  aP  S!n [        R                  " S"[        R                   5      nUR#                  U5      nU(       a  UR%                  5       nO8U SS  S#:X  a/  SSKn	 SS$KJn
  U	R/                  U
R1                  5       XU5      u  pnU < SU< SU< 3$ ! [,         a    SSKn
 NAf = f)%a  Return a string that identifies the current platform.  This is used mainly to
distinguish platform-specific build directories and platform-specific built
distributions.  Typically includes the OS name and version and the
architecture (as supplied by 'os.uname()'), although the exact information
included depends on the OS; eg. on Linux, the kernel version isn't
particularly important.

Examples of returned values:
   linux-i586
   linux-alpha (?)
   solaris-2.6-sun4u

Windows will return one of:
   win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
   win32 (all others - specifically, sys.platform is returned)

For other non-POSIX platforms, currently just returns 'sys.platform'.

r  amd64	win-amd64z(arm)	win-arm32z(arm64)z	win-arm64_PYTHON_HOST_PLATFORMrC  unameru   r   r[   rn   r  N   linuxsunosr   5solarisz%d.%sr      32bit64bit)il    z.%saix)aix_platform   cygwinz[\d.]+darwin)	sysconfig)rv   r]   r   r  r   platformr  r   r  r#   intmaxsize_aix_supportr  r  rY  ASCIIr   r   _osx_supportr  r  ImportErrorget_platform_osxget_config_vars)osnamer  releaser  machinebitnessr  rel_rer)   r  r  s              r/   get_host_platformr  `  s,   ( 
ww$ckk''))ckk''))))++|| "**,zz122	ww'W!5!5 || 13
-V7W \\^##C,Fooc3'//S9GbqzW !'**	w	1:FWQZ1!4gabk BBG $+IGuws{{333G	u	-~	x	Irxx0LL!ggiG	x		+ $0#@#@AZAZA\^dov#w '22	  		s   $I I,+I,win32r  r  )x86x64armc                      [         R                  S:w  a
  [        5       $ [         R                  R	                  S5      n U [
        ;  a
  [        5       $ [
        U    $ )Nr  VSCMD_ARG_TGT_ARCH)rv   r]   r  r  r  _TARGET_TO_PLAT)cross_compilation_targets    r/   get_platformr    sG    	ww$ ""!zz~~.BC6 ""344r2   r  )   r   r~  r  )r   collectionsr   
contextlibr-  globr   r  rt  r   loggingrv   rW  r  r   r  r  rl  r   ra  r   r   ro  dummy_threadingr  r   r   compatr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	getLoggerr   r#  rY  r   rT   rS   r;   rF   rA   re   r%   rJ   rq   r   r   r   r   r   r   r   contextmanagerr   r   r   r   r   r  r  r  r  VERBOSEr  r   r  r  r  r  r  r  Ir  r  r  r  r  r  r  r  r  r  r  r  r  ARCHIVE_EXTENSIONSrr  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r8  rA  r_  ry  r{  r  r  r  r  r  rH   r2   r/   <module>r     s  
    
 # 	   	  	   
   (  2 2 2 2 2 2 
		8	$ ZZ)*
ZZ 34 ZZ56
JJDE	ZZjjJJ{#	zzEFW!tytx4$ ,^&     & &f   6w6 wt& 4 :: ::	'>&(R"& :: '89;? ,-4 ** 9 :/ 8* D #)F )XC CRF! F!Z U AH$ 	&W+v W+| JJ~&	

#?@ jj!56 8 \\'11 B' T3< 3#	## # '	// '"<)'' <2$f  6" ",5# 5p+f +\/"J JZ,8P3h 5O=  
C  ('(s#   N N NN
N#"N#