
    /h]                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z&  ee'          Z(de)de)de*de
e)ddf         fdZ+dede
eddf         f         dede
eddf         f         fdZ,e,dede
e)ddf         fd            Z-dee)         dee)         fdZ.dee)         dee)         fdZ/dee)         deee)         ee)         f         fdZ0 G d d          Z1 G d d          Z2 G d d          Z3dS )     N)cache_from_source)	AnyCallableDict	GeneratorIterableListOptionalSetTuple)UninstallationError)get_bin_prefixget_bin_user)BaseDistribution)WINDOWS)egg_link_path_from_location)	getLogger
indent_log)askis_localnormalize_pathrenamesrmtree)AdjacentTempDirectoryTempDirectorybin_dirscript_nameis_guireturnc              #      K   t           j                            | |          }|V  t          sdS | dV  | dV  |r	| dV  dS | dV  dS )zCreate the fully qualified name of the files created by
    {console,gui}_scripts for the given ``dist``.
    Returns the list of file names
    Nz.exez.exe.manifestz-script.pywz
-script.py)ospathjoinr   )r   r   r   exe_names       R/var/www/html/venv/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py_script_namesr&      s       w||G[11H
NNN 



$
$
$$$$ &&&&&&&&&%%%%%%%%    fn.c           
           t          j                   dt          dt          dt          t          d d f         f fd            }|S )Nargskwr   c               ?   x   K   t                      } | i |D ]}||vr|                    |           |V   d S N)setadd)r*   r+   seenitemr(   s       r%   uniquez_unique.<locals>.unique*   sY      BOOO 	 	D4


	 	r'   )	functoolswrapsr   r   )r(   r2   s   ` r%   _uniquer5   '   s_     _Rc  3d?)C       Mr'   distc              #     K   | j         }|
J d            |                                 }|d                    |           }| j        }|r|dk    r9d                    | j        | j                  }|d                    |          z  }n|d                    |          z  }t          |          |D ]}t          j        	                    ||          }|V  |
                    d	          rzt          j                            |          \  }}	|	dd
         }
t          j        	                    ||
dz             }|V  t          j        	                    ||
dz             }|V  dS )a  
    Yield all the uninstallation paths for dist based on RECORD-without-.py[co]

    Yield paths to all the files in RECORD. For each .py file in RECORD, add
    the .pyc and .pyo in the same directory.

    UninstallPathSet.add() takes care of the __pycache__ .py[co].

    If RECORD is not found, raises UninstallationError,
    with possible information from the INSTALLER file.

    https://packaging.python.org/specifications/recording-installed-packages/
    Nznot installedz/Cannot uninstall {dist}, RECORD file not found.)r6   pipz{}=={}zZ You might be able to recover from this via: 'pip install --force-reinstall --no-deps {}'.z' Hint: The package was installed by {}..py.pyc.pyo)locationiter_declared_entriesformat	installerraw_nameversionr   r!   r"   r#   endswithsplit)r6   r=   entriesmsgr@   depentryr"   dnr(   bases              r%   uninstallation_pathsrK   5   sz      }H((**G?FFDFQQN	 	OI..//$->>C@@FsCC
 <CCINNNC!#&&& 	 	w||He,,


== 	W]]4((FBcrc7D7<<D6M22DJJJ7<<D6M22DJJJ	 	r'   pathsc                     t           j        j        t                      }t	          | t
                    D ]5t          fd|D                       }|s|                               6|S )zCompact a path set to contain the minimal number of paths
    necessary to contain all paths in the set. If /a/path/ and
    /a/path/to/a/file.txt are both in the set, leave only the
    shorter path.keyc              3      K   | ]k}                     |                    d                     o>t          |                    d                                                            k    V  ldS )*N)
startswithrstriplen).0	shortpathr"   seps     r%   	<genexpr>zcompact.<locals>.<genexpr>j   s       
 
  OOI,,S1122 DS))#..55c::;;<C
 
 
 
 
 
r'   )r!   r"   rW   r.   sortedrT   anyr/   )rL   short_pathsshould_skipr"   rW   s      @@r%   compactr]   a   s     '+CEEKu#&&& " " 
 
 
 
 
 )
 
 
 
 

  	"OOD!!!r'   c                   	
 d | D             }t          |          }t          d |                                D             t                    }t                      }dt          dt          fd
|D ]׊t          fd|D                       rt                      }t                      }t          j                  D ]L\  	}}|                    	
fd|D                        |                    	
fd	|D                        M||z
  s7|	                    |           |
                    t          j        z              t          t          |j        |                    |z  S )
zReturns a set containing the paths that need to be renamed.

    This set may include directories when the original sequence of paths
    included every file on disk.
    c                 N    i | ]"}t           j                            |          |#S  )r!   r"   normcaserU   ps     r%   
<dictcomp>z'compress_for_rename.<locals>.<dictcomp>z   s*    6661  ##Q666r'   c                 X    h | ]'}t           j                            |          d          (S )r   )r!   r"   rD   rb   s     r%   	<setcomp>z&compress_for_rename.<locals>.<setcomp>|   s+    GGGa((+GGGr'   rN   ar   c                  b    t           j                            t          j        j        |            S r-   )r!   r"   ra   r#   )rg   s    r%   	norm_joinz&compress_for_rename.<locals>.norm_join   s!    wa 0111r'   c              3   |   K   | ]6}t           j                                                          |          V  7d S r-   )r!   r"   ra   rR   )rU   wroots     r%   rX   z&compress_for_rename.<locals>.<genexpr>   sA      GGrw%%0033GGGGGGr'   c              3   2   K   | ]} |          V  d S r-   r`   )rU   ddirnameri   rl   s     r%   rX   z&compress_for_rename.<locals>.<genexpr>   s1      LLqyyw::LLLLLLr'   c              3   2   K   | ]} |          V  d S r-   r`   )rU   fro   ri   rl   s     r%   rX   z&compress_for_rename.<locals>.<genexpr>   s1      HHQYYtWa88HHHHHHr'   )r.   rY   valuesrT   strrZ   r!   walkupdatedifference_updater/   rW   map__getitem__)rL   case_map	remaining	unchecked	wildcards	all_filesall_subdirssubdirsfilesro   ri   rl   s            @@@r%   compress_for_renamer   t   s    76666HHIGGX__5F5FGGGSQQQI%%I2c 2c 2 2 2 2  ) )GGGGYGGGGG 	!ee	 #')wt}} 	I 	I#GWeLLLLLLGLLLLLLHHHHHH%HHHHHHH I% 	)''	222MM$-(((s8'3344y@@r'   c                 f   t          |           }t                      }t                      }t                      }|D ]x}|                    d          r|                    d          sd|v r2|                    t          j                            |                     |                    |           yt          t          t          j        j        |                    }t          |          }|D ]}t          j	        |          D ]\  }}	}
|
D ]}|                    d          rt          j        
                    ||          }t          j                            |          r6t          j                            |          |vr|                    |           |d |D             z  }||fS )as  Returns a tuple of 2 sets of which paths to display to user

    The first set contains paths that would be deleted. Files of a package
    are not added and the top-level directory of the package has a '*' added
    at the end - to signify that all it's contents are removed.

    The second set contains files that would have been skipped in the above
    folders.
    r;   z__init__.pyz
.dist-infoc                 N    h | ]"}t           j                            |d           #S )rQ   )r!   r"   r#   )rU   folders     r%   rf   z.compress_for_output_listing.<locals>.<setcomp>   s(    KKK27<<44KKKr'   )r.   rC   r/   r!   r"   ro   rw   ra   r]   rt   r#   isfile)rL   will_remove	will_skipfoldersr   r"   _normcased_filesr   dirpath_dirfilesfnamefile_s                r%   compress_for_output_listingr      s    e**KI eeGEEE  ==   	=='' 	/<4+?+?KK--...		$ 3rw/7788gG  ) )$&GFOO 	) 	) GQ! 
) 
)>>&)) We44GNN5)))((//7GGG MM%(((
)	) KK7KKKKK	!!r'   c                   v    e Zd ZdZddZdedefdZdedefdZdedefdZdd	Z	dd
Z
edefd            ZdS )StashedUninstallPathSetzWA set of file rename operations to stash files while
    tentatively uninstalling them.r   Nc                 "    i | _         g | _        d S r-   )
_save_dirs_movesselfs    r%   __init__z StashedUninstallPathSet.__init__   s     57 .0r'   r"   c                     	 t          |          }n # t          $ r t          d          }Y nw xY w|| j        t          j                            |          <   |j        S )zStashes a directory.

        Directories are stashed adjacent to their original location if
        possible, or else moved/copied into the user's temp dir.	uninstallkind)r   OSErrorr   r   r!   r"   ra   )r   r"   save_dirs      r%   _get_directory_stashz,StashedUninstallPathSet._get_directory_stash   si    	7&;D&A&AHH 	7 	7 	7$+666HHH	72:((../}s    //c                 V   t           j                            |          }t           j                            |          d}}d}||k    rF	 | j        |         }np# t
          $ r Y nw xY wt           j                            |          |}}||k    Ft           j                            |          }t          d          }|| j        |<   t           j                            ||          }|r:|t           j        j        k    r%t           j        	                    |j        |          S |j        S )zStashes a file.

        If no root has been provided, one will be created for the directory
        in the user's temp directory.Nr   r   )
r!   r"   ra   ro   r   KeyErrorr   relpathcurdirr#   )r   r"   headold_headr   r   s         r%   _get_file_stashz'StashedUninstallPathSet._get_file_stash   s   
 w%%..hh?40   W__T22D(D h 7??4((D$+666H$,DOD!'//$-- 	8w"'.007<<w777}s   
A 
A%$A%c                    t           j                            |          ot           j                            |           }|r|                     |          }n|                     |          }| j                            ||f           |r3t           j                            |          rt          j        |           t          ||           |S )zStashes the directory or file and returns its new location.
        Handle symlinks as files to avoid modifying the symlink targets.
        )
r!   r"   isdirislinkr   r   r   appendrmdirr   )r   r"   path_is_dirnew_paths       r%   stashzStashedUninstallPathSet.stash   s     gmmD))F"'..2F2F.F 	20066HH++D11HD(+,,, 	27==22 	 HXhr'   c                     | j                                         D ]\  }}|                                 g | _        i | _         dS )z0Commits the uninstall by removing stashed files.N)r   itemscleanupr   )r   r   r   s      r%   commitzStashedUninstallPathSet.commit  sJ    ?0022 	 	KAxr'   c                 x   | j         D ]}t          j        dg|R   | j         D ] \  }}	 t                              d||           t          j                            |          st          j                            |          rt	          j        |           n.t          j        	                    |          rt          |           t          ||           # t          $ r@}t                              d|           t                              d|           Y d}~d}~ww xY w|                                  dS )z2Undoes the uninstall by moving stashed files back.zMoving to %s
 from %szReplacing %s from %szFailed to restore %szException: %sN)r   loggerinfodebugr!   r"   r   r   unlinkr   r   r   r   errorr   )r   rc   r   r"   exs        r%   rollbackz StashedUninstallPathSet.rollback  s?    	6 	6AK05155555"k 
	2 
	2NHd	23XtDDD7>>(++ %rw~~h/G/G %Ih''''W]]8,, %8$$$h'''' 2 2 23X>>>_b111111112 	s   B-C
D##6DD#c                 *    t          | j                  S r-   )boolr   r   s    r%   can_rollbackz$StashedUninstallPathSet.can_rollback,  s    DK   r'   r   N)__name__
__module____qualname____doc__r   rs   r   r   r   r   r   propertyr   r   r`   r'   r%   r   r      s        & &0 0 0 0     C C    6# #    *      & !d ! ! ! X! ! !r'   r   c                       e Zd ZdZdeddfdZdedefdZdeddfdZ	d	ed
eddfdZ
ddededdfdZdedefdZddZddZededd fd            ZdS )UninstallPathSetzMA set of file paths to be removed in the uninstallation of a
    requirement.r6   r   Nc                     t                      | _        t                      | _        i | _        || _        t                      | _        d S r-   )r.   _paths_refuse_pth_distr   _moved_paths)r   r6   s     r%   r   zUninstallPathSet.__init__5  s:     #!$46	
355r'   r"   c                      t          |          S )zs
        Return True if the given path is one we are permitted to
        remove/modify, False otherwise.

        )r   )r   r"   s     r%   
_permittedzUninstallPathSet._permitted<  s     ~~r'   c                 N   t           j                            |          \  }}t           j                            t	          |          t           j                            |                    }t           j                            |          sd S |                     |          r| j        	                    |           n| j
        	                    |           t           j                            |          d         dk    r$| 	                    t          |                     d S d S )N   r9   )r!   r"   rD   r#   r   ra   existsr   r   r/   r   splitextr   )r   r"   r   tails       r%   r/   zUninstallPathSet.addD  s    W]]4((
d w||N400"'2B2B42H2HIIw~~d## 	F??4   	#KOOD!!!!LT""" 7D!!!$--HH&t,,----- .-r'   pth_filerH   c                    t          |          }|                     |          rB|| j        vrt          |          | j        |<   | j        |                             |           d S | j                            |           d S r-   )r   r   r   UninstallPthEntriesr/   r   )r   r   rH   s      r%   add_pthzUninstallPathSet.add_pthW  s    !(++??8$$ 	'ty((&9(&C&C	(#Ih##E*****LX&&&&&r'   Fauto_confirmverbosec                    | j         s't                              d| j        j                   dS | j        j         d| j        j         }t                              d|           t                      5  |s|                     |          r| j        }t          | j                   }t          t          |                    D ]2}|                    |           t                              d|           3| j                                        D ]}|                                 t                              d|           ddd           dS # 1 swxY w Y   dS )z\Remove paths in ``self._paths`` with confirmation (unless
        ``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.N-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)r   r   r   r   rA   rB   r   _allowed_to_proceedr   r   rY   r]   r   r   r   rr   remove)r   r   r   dist_name_versionmoved
for_renamer"   pths           r%   r   zUninstallPathSet.remove`  s    { 	KKI
#   F#z2IITZ5GII&(9:::\\ 	N 	N Nt77@@ N)0==
"7:#6#677 J JDKK%%%NN#BDIIII9++-- ! !CJJLLLL9;LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   3CEEEc                 r   dt           dt          t                    ddfd}|st          | j                  \  }}n"t	          | j                  }t	                      } |d|            |d|            |d| j                   |r |d	t          | j                             t          d
d          dk    S )z@Display which files would be deleted and prompt for confirmationrF   rL   r   Nc                    |sd S t                               |            t                      5  t          t	          |                    D ]}t                               |           	 d d d            d S # 1 swxY w Y   d S r-   )r   r   r   rY   r]   )rF   rL   r"   s      r%   _displayz6UninstallPathSet._allowed_to_proceed.<locals>._display  s     KK & &"75>>22 & &DKK%%%%&& & & & & & & & & & & & & & & & & &s   :A55A9<A9zWould remove:z+Would not remove (might be manually added):z%Would not remove (outside of prefix):zWill actually move:zProceed (Y/n)? )yn r   )rs   r   r   r   r.   r   r   r   )r   r   r   r   r   s        r%   r   z$UninstallPathSet._allowed_to_proceed}  s    	&# 	&hsm 	& 	& 	& 	& 	&  	%@%M%M"K dk**KI+...>	JJJ8$,GGG 	NH*,?,L,LMMM$n55<<r'   c                 H   | j         j        s't                              d| j        j                   dS t                              d| j        j                   | j                                          | j        	                                D ]}|                                 dS )z1Rollback the changes previously made by remove().z'Can't roll back %s; was not uninstalledNzRolling back uninstall of %s)
r   r   r   r   r   rA   r   r   r   rr   )r   r   s     r%   r   zUninstallPathSet.rollback  s     - 	LL9
#   F2DJ4GHHH""$$$9##%% 	 	CLLNNNN	 	r'   c                 8    | j                                          dS )z?Remove temporary save dir: rollback will no longer be possible.N)r   r   r   s    r%   r   zUninstallPathSet.commit  s      """""r'   c           	         |j         }|j        }|+t                              d|j                    | |          S t          |          }|j        s7t                              d|j        |t          j                    | |          S |d t          j
        d          t          j
        d          hD             v r,t                              d|j        |            | |          S  | |          }t          |j                  }|j        o@|d uo<t          j                            |          o|                    |j         d           }|rp||                    |           |                                }|:|D ]5}	|                    t          j                            ||	                     6n:|                    d          r	 |                    d	          }
|
                    d
          n# t2          $ r g Y nw xY wfd|                    d                                          D             D ]}t          j                            ||          }|                    |           |                    | d           |                    | d           |                    | d           n1|j        r't7          d                    |j                            |j        r|                    |           t          j                            |          d         }t          j                            t          j                            |          d          }|                     |d|z              nj|j!        r)tE          |          D ]}|                    |           n:|rtG          |          5 }t          j        $                    |%                                &                                          }t          |          }d d d            n# 1 swxY w Y   t          j        '                    ||          sJ d| d|j         d| d            |                    |           t          j                            t          j                            |          d          }|                     ||           nt          (                    d||           |j)        rtU                      }ntW                      }	 |,                                D ]r}|                    t          j                            ||                     tZ          r6|                    t          j                            || d                     sn# t2          t\          f$ r Y nw xY wdt^          dt`          dtb          t`          d d f         fd} |||          D ]}|                    |           |S )Nz-Not uninstalling %s since it is not installedz1Not uninstalling %s at %s, outside environment %sc                     h | ]}||S r`   r`   rb   s     r%   rf   z-UninstallPathSet.from_dist.<locals>.<setcomp>  s.     (
 (
 (
(
(
 (
 (
r'   stdlib
platstdlibz<Not uninstalling %s at %s, as it is in the standard library.z	.egg-infoztop_level.txtznamespace_packages.txtF)keependsc                      g | ]
}|r|v|S r`   r`   )rU   rc   
namespacess     r%   
<listcomp>z.UninstallPathSet.from_dist.<locals>.<listcomp>  s8     & & && j00 000r'   r9   r;   r<   zCannot uninstall {!r}. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.r   zeasy-install.pthz./z	Egg-link z& does not match installed location of z (at )z)Not sure how to uninstall: %s - Check: %sz.batr6   r   r   c              3      K   |                                  D ]Q}|j        dk    rt          ||j        d          E d {V  *|j        dk    rt          ||j        d          E d {V  Rd S )Nconsole_scriptsFgui_scriptsT)iter_entry_pointsgroupr&   name)r6   r   entry_points      r%   iter_scripts_to_removez:UninstallPathSet.from_dist.<locals>.iter_scripts_to_remove9  s        $5577 N N$(999,Wk6FNNNNNNNNNN &-77,Wk6FMMMMMMMMM	N Nr'   )2r=   info_locationr   r   canonical_namer   localsysprefix	sysconfigget_pathr   rA   "installed_with_setuptools_egg_infor!   r"   r   rC   setuptools_filenamer/   r>   r#   is_file	read_text
splitlinesFileNotFoundErrorinstalled_by_distutilsr   r?   installed_as_eggrD   ro   r   installed_with_dist_inforK   openra   readlinestripsamefiler   in_usersiter   r   iter_distutils_script_namesr   NotADirectoryErrorr   rs   r   )clsr6   dist_locationr   normalized_dist_locationpaths_to_removedevelop_egg_linksetuptools_flat_installationinstalled_filesinstalled_filenamespace_packagestop_level_pkgr"   easy_install_eggeasy_install_pthfhlink_pointernormalized_link_pointerr   scriptr   sr   s                         @r%   	from_distzUninstallPathSet.from_dist  s   * KK?#   3t99#1-#@#@ z 	KKC#(
	   3t99# (
 (
(22I4F|4T4TU(
 (
 (
 
 

 KKN#(  
 3t99#d))6t}EE 3 ST)S}--S
 "**d.F+Q+Q+QRRR 	% ( L	(##M222"88::O*&5 U UN#'']N(S(STTTTU
 o.. 7O)-8P)Q)Q& "4!>!>!>!N!NJJ ) $ $ $!#JJJ$& & & &!^^O<<GGII& & & 	7 	7M
 7<<}EED#''---#''4555#''4666#''46666( 0	%FFLfMG G   " '	 ...!w}}];;A>!w||.."    ##$4d=M6MNNNN* 	,T22 * *##D))))*  	 &'' G2!w//0C0C0E0EFF*8*F*F'G G G G G G G G G G G G G G G 7##')A   8L 8 8=8 8'48 8 8    0111!w|| 0113E    ##$4mDDDD LL;    	'"nnGG$&&G	::<< P P##BGLL&$A$ABBB P#''Wooo(N(NOOOP "#56 	 	 	D		N"	N	N sD$'	N 	N 	N 	N ('g66 	# 	#A""""s8   G= =HHAP,,P03P0BV" "V65V6)FFr   )r   r   r   r   r   r   rs   r   r   r/   r   r   r   r   r   classmethodr!  r`   r'   r%   r   r   1  sf        6- 6$ 6 6 6 6s t    . . . . . .&' 'C 'D ' ' ' 'N N4 N$ N4 N N N N:=4 =D = = = =8   # # # # [- [2D [ [ [ [[ [ [r'   r   c                   B    e Zd ZdeddfdZdeddfdZd	dZdefdZdS )
r   r   r   Nc                 H    || _         t                      | _        d | _        d S r-   )filer.   rE   _saved_lines)r   r   s     r%   r   zUninstallPthEntries.__init__J  s"    	!$37r'   rH   c                     t           j                            |          }t          r;t           j                            |          d         s|                    dd          }| j                            |           d S )Nr   \/)r!   r"   ra   r   
splitdrivereplacerE   r/   )r   rH   s     r%   r/   zUninstallPthEntries.addO  sl      ''  	-27--e44Q7 	-MM$,,Er'   c                    t                               d| j                   t          j                            | j                  s"t                               d| j                   d S t          | j        d          5 }|                                }|| _	        d d d            n# 1 swxY w Y   t          d |D                       rd}nd}|rO|d                             |                    d                    s!|d         |                    d          z   |d<   | j        D ]Y}	 t                               d	|           |                    ||z                       d                     J# t          $ r Y Vw xY wt          | j        d
          5 }|                    |           d d d            d S # 1 swxY w Y   d S )NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %srbc              3      K   | ]}d |v V  	dS )s   
Nr`   )rU   lines     r%   rX   z-UninstallPthEntries.remove.<locals>.<genexpr>i  s&      114w$111111r'   z

zutf-8zRemoving entry: %swb)r   r   r%  r!   r"   r   warningr	  	readlinesr&  rZ   rC   encoderE   r   
ValueError
writelines)r   r  linesendlinerH   s        r%   r   zUninstallPthEntries.remove^  s7   6	BBB w~~di(( 	NNKTYWWWF$)T"" 	&bLLNNE %D	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 11511111 	GGG 	<r++GNN7,C,CDD 	<b	GNN7$;$;;E"I\ 	 	E3U;;;ego55g>>????   $)T"" 	!bMM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s7   <B$$B(+B((AE//
E<;E<F77F;>F;c                 &   | j         "t                              d| j                   dS t                              d| j                   t          | j        d          5 }|                    | j                    d d d            n# 1 swxY w Y   dS )Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater2  T)r&  r   r   r%  r   r	  r7  )r   r  s     r%   r   zUninstallPthEntries.rollbacky  s    $LLI49UUU58$)DDD$)T"" 	-bMM$+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-ts   BB
B
r   )	r   r   r   rs   r   r/   r   r   r   r`   r'   r%   r   r   I  s        8 8 8 8 8 8
           ! ! ! !6$      r'   r   )4r3   r!   r   r   importlib.utilr   typingr   r   r   r   r   r	   r
   r   r   pip._internal.exceptionsr   pip._internal.locationsr   r   pip._internal.metadatar   pip._internal.utils.compatr   pip._internal.utils.egg_linkr   pip._internal.utils.loggingr   r   pip._internal.utils.miscr   r   r   r   r   pip._internal.utils.temp_dirr   r   r   r   rs   r   r&   r5   rK   r]   r   r   r   r   r   r`   r'   r%   <module>rE     s<       				 



     , , , , , , W W W W W W W W W W W W W W W W W W W W W W 8 8 8 8 8 8 @ @ @ @ @ @ @ @ 3 3 3 3 3 3 . . . . . . D D D D D D = = = = = = = = S S S S S S S S S S S S S S M M M M M M M M	8		&&"&,0&sD$& & & &&iT4001c9S$_--.    	(/ (Ic4o4N ( ( ( 	(V8C= SX    &Ax} AS A A A AD/"x} /"s3xS?Q9R /" /" /" /"df! f! f! f! f! f! f! f!RU U U U U U U Up7 7 7 7 7 7 7 7 7 7r'   