� ��^i�\� ��ddlZddlZddlZddlZddlZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZddlmZddlmZddlmZddlmZmZddlmZdd lmZdd lmZm Z dd l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*m+Z+ee,��Z-d ede.de/de e.fd�Z0de de efde de effd�Z1e1d ede e.fd���Z2de e.dee.fd�Z3de e.dee.fd�Z4de e.deee.ee.ffd�Z5Gd�d��Z6Gd�d��Z7Gd�d��Z8dS) �N)�cache_from_source) �Any�Callable�Dict�Iterable�Iterator�List�Optional�Set�Tuple)� pkg_resources)� Distribution)�UninstallationError)�get_bin_prefix� get_bin_user)�WINDOWS)�egg_link_path_from_location)� getLogger� indent_log)�ask�dist_in_usersite� dist_is_local�is_local�normalize_path�renames�rmtree)�AdjacentTempDirectory� TempDirectory�dist� script_name�is_gui�returnc�x�t|��rt��}nt��}tj�||��}|g}t rc|�|dz��|�|dz��|r|�|dz��n|�|dz��|S)z�Create the fully qualified name of the files created by {console,gui}_scripts for the given ``dist``. Returns the list of file names z.exez .exe.manifestz -script.pywz -script.py)rrr�os�path�joinr�append)rr r!�bin_dir�exe_name�paths_to_removes ��/builddir/build/BUILDROOT/alt-python311-pip-21.3.1-4.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/pip/_internal/req/req_uninstall.py� _script_namesr,s��� ����#��.�.��� �"�"���w�|�|�G�[�1�1�H��j�O��<����x�&�0�1�1�1����x�/�9�:�:�:� � <� � "� "�8�m�#;� <� <� <� <� � "� "�8�l�#:� ;� ;� ;� ���fn.c���tj���dtdtdttf�fd� ��}|S)N�args�kwr"c?�x�K�t��}�|i|��D]}||vr|�|��|V�� dS�N)�set�add)r0r1�seen�itemr.s �r+�uniquez_unique..unique5sY����������B��O��O�O� � �D��4����������� � � �� � r-)� functools�wrapsrr)r.r8s` r+�_uniquer;4sV����_�R����c�����#���������� �Mr-c#�K� tj|�d����}n�#t$r�}d�|���} t |�d����}|r|dkrt ��� |d�|��z }nU#ttt f$r;d�|j |j ��}|d�|��z }YnwxYwt|��|�d }~wwxYw|D]�}tj �|j|d ��}|V�|�d ��rztj �|��\}} | d d �} tj �|| d z��}|V�tj �|| dz��}|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/ �RECORDz/Cannot uninstall {dist}, RECORD file not found.)r� INSTALLER�pipz' Hint: The package was installed by {}.z{}=={}zZ You might be able to recover from this via: 'pip install --force-reinstall --no-deps {}'.Nr�.py������.pyc�.pyo)�csv�reader�get_metadata_lines�FileNotFoundError�format�next� ValueError�OSError� StopIteration� project_name�versionrr$r%r&�location�endswith�split) r�r�missing_record_exception�msg� installer�dep�rowr%�dnr.�bases r+�uninstallation_pathsrZ@s�����E� �J�t�.�.�x�8�8� 9� 9���� �E�E�E�?�F�F�D�F�Q�Q�� O��T�4�4�[�A�A�B�B�I�� #� �U� 2� 2� �l�l�"�!3� �<�C�C�I�N�N� N�C�C���� �3� � � ��/�/�$�"3�T�\�B�B�C� �@�@F��s� � � �C�C�C� ����"�#�&�&�,D�D�����E����� � ���w�|�|�D�M�3�q�6�2�2��� � � � �=�=�� � � ��W�]�]�4�(�(�F�B���c�r�c�7�D��7�<�<��D�6�M�2�2�D��J�J�J��7�<�<��D�6�M�2�2�D��J�J�J�� � s9�',� D �D� 8B�D�AC1�.D�0C1�1D�D �pathsc�����tjj�t��}t |t ���D]5�t ��fd�|D����}|s|�����6|S)z�Compact 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.��keyc3���K�|]k}��|�d����o>�t|�d���������kV��ldS)�*N)� startswith�rstrip�len)�.0� shortpathr%�seps ��r+� zcompact..us������ � �� �O�O�I�,�,�S�1�1� 2� 2� D��S��)�)�#�.�.�5�5�c�:�:�;�;�<��C� � � � � � r-)r$r%rfr4�sortedrc�anyr5)r[� short_paths� should_skipr%rfs @@r+�compactrlls����� �'�+�C��E�E�K��u�#�&�&�&�"�"��� � � � � �)� � � � � � � � "� �O�O�D� !� !� !�� �r-c��� � � �d�|D��}t|��}td�|���D��t���}t��}dtdtfd�� |D]׊ t � fd�|D����r�t��}t��}t j� ��D]L\� }}|�� � � fd�|D����|�� � � fd �|D�����M||z s7|� |��|� � t j z����tt|j |����|zS) z�Returns 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|]"}tj�|��|��#S�)r$r%�normcase�rd�ps r+� z'compress_for_rename..�s*��6�6�6�1��� � ��#�#�Q�6�6�6r-c�X�h|]'}tj�|��d��(S)r)r$r%rQrqs r+� z&compress_for_rename..�s+��G�G�G���� � �a�(�(��+�G�G�Gr-r]�ar"c�b�tj�tjj|���Sr3)r$r%rpr&)rvs r+� norm_joinz&compress_for_rename..norm_join�s!���w����� �a� 0�1�1�1r-c3�|�K�|]6}tj�����|��V��7dSr3)r$r%rpra)rd�w�roots �r+rgz&compress_for_rename..�sA�����G�G��r�w����%�%�0�0��3�3�G�G�G�G�G�Gr-c3�2�K�|]}���|��V��dSr3ro)rd�d�dirnamerxr{s ���r+rgz&compress_for_rename..�s1�����L�L�q�y�y��w��:�:�L�L�L�L�L�Lr-c3�2�K�|]}���|��V��dSr3ro)rd�fr~rxr{s ���r+rgz&compress_for_rename..�s1�����H�H�Q�Y�Y�t�W�a�8�8�H�H�H�H�H�Hr-)r4rh�valuesrc�strrir$�walk�update�difference_updater5rf�map� __getitem__) r[�case_map� remaining� unchecked� wildcards� all_files� all_subdirs�subdirs�filesr~rxr{s @@@r+�compress_for_renamer�s������ 7�6��6�6�6�H��H� � �I��G�G�X�_�_�5F�5F�G�G�G�S�Q�Q�Q�I��%�%�I�2�c�2�c�2�2�2�2��)�)�� �G�G�G�G�Y�G�G�G� G� G� � �!�e�e� � #��� �')�w�t�}�}� I� I� #�G�W�e� � � �L�L�L�L�L�L�G�L�L�L� L� L� L� � � �H�H�H�H�H�H�%�H�H�H� H� H� H� H��I�%� )� � '� '� � 2� 2� 2� �M�M�$���-� (� (� (�� �s�8�'��3�3� 4� 4�y� @�@r-c�f�t|��}t��}t��}t��}|D]x}|�d��r�|�d��sd|vr2|�tj�|����|�|���ytt tjj|����}t|��}|D]�}tj |��D]�\}} } | D]�} | �d��r�tj� || ��} tj� | ��r6tj�| ��|vr|�| ��������|d�|D��z}||fS)asReturns 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. rBz __init__.py� .dist-infoc�N�h|]"}tj�|d����#S)r`)r$r%r&)rd�folders r+ruz.compress_for_output_listing..�s(��K�K�K��2�7�<�<���4�4�K�K�Kr-) r4rPr5r$r%r~r�rprlr�r&�isfile) r[� will_remove� will_skip�foldersr�r%�_normcased_filesr��dirpath�_�dirfiles�fname�file_s r+�compress_for_output_listingr��s����e�*�*�K����I��e�e�G� �E�E�E����� �=�=�� � � � � �=�=�� '� '� /�<�4�+?�+?� �K�K������-�-� .� .� .� � � �$������3�r�w�/��7�7�8�8���g���G�� )� )��$&�G�F�O�O� )� )� �G�Q��!� )� )���>�>�&�)�)����� � �W�e�4�4���G�N�N�5�)�)�)���(�(��/�/�7G�G�G��M�M�%�(�(�(�� )� )��K�K�7�K�K�K�K�K� � � !�!r-c�v�eZdZdZd d�Zdedefd�Zdedefd�Zdedefd�Zd d �Z d d �Z e de fd ���Z dS) �StashedUninstallPathSetzWA set of file rename operations to stash files while tentatively uninstalling them.r"Nc�"�i|_g|_dSr3)� _save_dirs�_moves��selfs r+�__init__z StashedUninstallPathSet.__init__�s��57���.0�� � � r-r%c��� t|��}n #t$rtd���}YnwxYw||jtj�|��<|jS)z�Stashes a directory. Directories are stashed adjacent to their original location if possible, or else moved/copied into the user's temp dir.� uninstall��kind)rrKrr�r$r%rp)r�r%�save_dirs r+�_get_directory_stashz,StashedUninstallPathSet._get_directory_stash�si��  7�&;�D�&A�&A�H�H��� 7� 7� 7�$�+�6�6�6�H�H�H� 7����2:�����(�(��.�.�/��}�s ��/�/c�V�tj�|��}tj�|��d}}d}||krF |j|}np#t $rYnwxYwtj�|��|}}||k�Ftj�|��}t d���}||j|<tj�||��}|r:|tjjkr%tj� |j|��S|jS)z�Stashes 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%rpr~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�2�D�(�D� �h����7�?�?�4�(�(�D�$�+�6�6�6�H�$,�D�O�D� !��'�/�/�$��-�-�� � 8�w�"�'�.�0�0��7�<�<�� �w�7�7� 7��}�s� A� A%�$A%c��tj�|��otj�|�� }|r|�|��}n|�|��}|j�||f��|r3tj�|��rtj|��t||��|S)z�Stashes 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�r'�rmdirr)r�r%� path_is_dir�new_paths r+�stashzStashedUninstallPathSet.stashs����g�m�m�D�)�)�F�"�'�.�.��2F�2F�.F� � � 2��0�0��6�6�H�H��+�+�D�1�1�H� � ���D�(�+�,�,�,� � �2�7�=�=��2�2� � �H�X� � � ���h�����r-c��|j���D]\}}|����g|_i|_dS)z0Commits the uninstall by removing stashed files.N)r��items�cleanupr�)r�r�r�s r+�commitzStashedUninstallPathSet.commitsJ���?�0�0�2�2� � �K�A�x� � � � � � � ��� �����r-c�x�|jD]}tjdg|�R��|jD�]\}} t�d||��tj�|��stj�|��rt j|��n.tj� |��rt|��t||����#t$r@}t� d|��t�d|��Yd}~��d}~wwxYw|���dS)z2Undoes the uninstall by moving stashed files back.zMoving to %s from %szReplacing %s from %szFailed to restore %sz Exception: %sN)r��logger�info�debugr$r%r�r��unlinkr�rrrK�errorr�)r�rrr�r%�exs r+�rollbackz StashedUninstallPathSet.rollback$s?���� 6� 6�A� �K�0� 5�1� 5� 5� 5� 5� 5�"�k� 2� 2�N�H�d� 2�� � �3�X�t�D�D�D��7�>�>�(�+�+�%�r�w�~�~�h�/G�/G�%��I�h�'�'�'�'��W�]�]�8�,�,�%��8�$�$�$���h�'�'�'�'��� 2� 2� 2�� � �3�X�>�>�>�� � �_�b�1�1�1�1�1�1�1�1����� 2���� � � � � � � � s�B-C� D#�#6D�D#c�*�t|j��Sr3)�boolr�r�s r+� can_rollbackz$StashedUninstallPathSet.can_rollback7s���D�K� � � r-�r"N)�__name__� __module__� __qualname__�__doc__r�r�r�r�r�r�r��propertyr�r�ror-r+r�r��s�������&�&�0�0�0�0� �� �� � � � ��C��C�����6�#��#�����*��������&�!�d�!�!�!��X�!�!�!r-r�c��eZdZdZdeddfd�Zdedefd�Zdeddfd�Z d ed eddfd �Z dd ededdfd�Z dedefd�Z dd�Z dd�Zededdfd���ZdS)�UninstallPathSetzMA set of file paths to be removed in the uninstallation of a requirement.rr"Nc��t��|_t��|_i|_||_t ��|_dSr3)r4r[�_refuse�pthrr�� _moved_paths)r�rs r+r�zUninstallPathSet.__init__@s:��"�u�u�� �!$���� �35����� �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+� _permittedzUninstallPathSet._permittedGs�� ��~�~�r-c�N�tj�|��\}}tj�t |��tj�|����}tj�|��sdS|�|��r|j� |��n|j � |��tj� |��ddkr$|� t|����dSdS)N�r@) r$r%rQr&rrp�existsr�r[r5r��splitextr)r�r%r��tails r+r5zUninstallPathSet.addOs����W�]�]�4�(�(� ��d��w�|�|�N�4�0�0�"�'�2B�2B�4�2H�2H�I�I���w�~�~�d�#�#� � �F� �?�?�4� � � #� �J�N�N�4� � � � � �L� � �T� "� "� "� �7� � �D� !� !�!� $�� -� -� �H�H�&�t�,�,� -� -� -� -� -� .� -r-�pth_file�entryc��t|��}|�|��rB||jvrt|��|j|<|j|�|��dS|j�|��dSr3)rr�r��UninstallPthEntriesr5r�)r�r�r�s r+�add_pthzUninstallPathSet.add_pthbs���!�(�+�+�� �?�?�8� $� $� '��t�x�'�'�%8��%B�%B����"� �H�X� � "� "�5� )� )� )� )� )� �L� � �X� &� &� &� &� &r-F� auto_confirm�verbosec��|js't�d|jj��dS|jjdz|jjz}t�d|��t ��5|s|�|��r�|j}t|j��}tt|����D]2}|� |��t� d|���3|j���D]}|����t�d|��ddd��dS#1swxYwYdS)z[Remove paths in ``self.paths`` with confirmation (unless ``auto_confirm`` is True).z7Can't uninstall '%s'. No files were found to uninstall.N�-zUninstalling %s:zRemoving file or directory %szSuccessfully uninstalled %s)r[r�r�rrMrNr�_allowed_to_proceedr�r�rhrlr�r�r�r��remove)r�r�r��dist_name_version�moved� for_renamer%r�s r+r�zUninstallPathSet.removeks����z� � �K�K�I�� �&� � � � �F� �I�2�S�8�4�9�;L�L��� � �&�(9�:�:�:� �\�\� N� N�� N�t�7�7��@�@� N��)��0���<�<� �"�7�:�#6�#6�7�7�J�J�D��K�K��%�%�%��N�N�#B�D�I�I�I�I��8�?�?�,�,�!�!�C��J�J�L�L�L�L�� � �9�;L�M�M�M� N� N� N� N� N� N� N� N� N� N� N� N���� N� N� N� N� N� Ns�4C E�E�Ec�r�dtdttddfd�}|st|j��\}}n"t |j��}t ��}|d|��|d|��|d|j��|r|d t |j����td d ��d kS) z@Display which files would be deleted and prompt for confirmationrTr[r"Nc��|sdSt�|��t��5tt |����D]}t�|��� ddd��dS#1swxYwYdSr3)r�r�rrhrl)rTr[r%s r+�_displayz6UninstallPathSet._allowed_to_proceed.._display�s���� ��� �K�K�� � � ���� &� &�"�7�5�>�>�2�2�&�&�D��K�K��%�%�%�%�&� &� &� &� &� &� &� &� &� &� &� &� &���� &� &� &� &� &� &s�:A5�5A9�<A9z Would remove:z+Would not remove (might be manually added):z%Would not remove (outside of prefix):zWill actually move:zProceed (Y/n)? )�y�n�r�)r�rr�r[r4r�r�r)r�r�r�r�r�s r+r�z$UninstallPathSet._allowed_to_proceed�s��� &�#� &�h�s�m� &�� &� &� &� &�� �%@���%L�%L� "�K����d�j�/�/�K����I����+�.�.�.���>� �J�J�J���8�$�,�G�G�G� � M� �H�*�,?�� �,K�,K� L� L� L��$�n�5�5��<�.�s.�� � � ��� � � � � r-�stdlib� platstdlibzz.UninstallPathSet.from_dist..�s8���&�&�&���&��j�0�0��0�0�0r-r@rBrCz�Cannot 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.z.eggr�zeasy-install.pthz./r�z;Egg-link {} does not match installed location of {} (at {})z)Not sure how to uninstall: %s - Check: %s�scriptsz.bat�console_scripts)�groupF� gui_scriptsT)0rrOrr�r�r^�sys�prefix� sysconfig�get_pathrrMrHr � to_filename�egg_infor$r%r��getattr� _providerrPr5� has_metadata� get_metadata� splitlines�normpathr&rrQr~r�rZ�openrp�readline�stripr��metadata_isdir�metadata_listdirrrrr� get_entry_map�keys�extendr,)�clsr� dist_pathr*�develop_egg_link�develop_egg_link_egg_info�egg_info_exists�distutils_egg_info�installed_filer%� top_level_pkg�easy_install_egg�easy_install_pth�fh� link_pointer�scriptr(�_scripts_to_remover��namer��sr�s @r+� from_distzUninstallPathSet.from_dist�sg���"�4�=�1�1� ��T�"�"� � �K�K�C����� �  � � � �3�t�9�9� � � � ��(��2�2�I�4F�|�4T�4T�U� � � � � � �K�K�N���� � � � �3�t�9�9� ��#�d�)�)��6�t�7H�I�I��$1�$8�$8� � %�d�&7� 8� 8�% �% �!��-�I�B�G�N�N�4�=�,I�,I��$�T�^�V�T�B�B�� �M �� �&�&�{�3�3�M ��M�*�*�+D�E�E�M � � � �� � .� .� .�� � �!6�7�7� 7�&*�&7�&7�)�'�'��*�,�,�.�.�N��7�+�+�B�G�L�L����,W�,W�X�X�D�#�'�'��-�-�-�-� .��"�"�?�3�3� 7��$�$�%=�>�>�$�!%�!2�!2�3K�!L�!L�J�J�!#�J�&�&�&�&�!�.�.��?�?�J�J�L�L�&�&�&� 7� 7�M� �7�<�<�� �}�E�E�D�#�'�'��-�-�-�#�'�'��u� �5�5�5�#�'�'��v� �6�6�6�#�'�'��v� �6�6�6�6�� �, �%�F�FL�f��%�G�G��� ��]� #� #�F� +� +�# � � � �� � .� .� .�!�w�}�}�T�]�;�;�A�>� �!�w�|�|������ �.�.�0B� � � � � #� #�$4�d�=M�6M� N� N� N� N� � ���!7�!7� �!E�!E� �,�T�2�2� *� *���#�#�D�)�)�)�)� *�� ��&�'�'� G�2�!�w�/�/�� � � � �0C�0C�0E�0E�F�F� � G� G� G� G� G� G� G� G� G� G� G���� G� G� G� G��� �-�-�-�L�S�S��d�/�����.�-�-� � � � 0� 1� 1� 1�!�w�|�|����� 0�1�1�3E� � � � � #� #�$4�d�m� D� D� D� D� �L�L�;��� � � � � � � �Y� '� '� P�D�,?�,?� �,J�,J� P��/�/� �:�:� P� P��#�D�)�)�/�*�n�n�G�G�,�.�.�G��#�#�B�G�L�L��&�$A�$A�B�B�B��P�#�'�'��� � �W�f�(E�(E��(N�O�O�O�� ���,�,�3D�,�E�E��#�(�(�*�*� H� H�D� � %� %�m�D�$��&F�&F� G� G� G� G��(�(�}�(�=�=� ��$�$�&�&� G� G�D� � %� %�m�D�$��&E�&E� F� F� F� F�#� #� #�A� � � �� "� "� "� "��s�*AR:�:R>�R>)FFr�)r�r�r�r�rr�r�r�r�r5r�r�r�r�r�� classmethodr#ror-r+r�r�<sd��������6�\�6�d�6�6�6�6��s��t�����.��.��.�.�.�.�&'��'�C�'�D�'�'�'�'�N�N�4�N�$�N�4�N�N�N�N�:=�4�=�D�=�=�=�=�8 � � � �#�#�#�#��I�\�I�.@�I�I�I��[�I�I�Ir-r�c�B�eZdZdeddfd�Zdeddfd�Zd d�Zdefd�ZdS) r�r�r"Nc�H�||_t��|_d|_dSr3)�filer4�entries� _saved_lines)r�r�s r+r�zUninstallPthEntries.__init__Cs"���� �!$���� �37����r-r�c���tj�|��}tr;tj�|��ds|�dd��}|j�|��dS)Nr�\�/)r$r%rpr� splitdrive�replacer(r5)r�r�s r+r5zUninstallPthEntries.addHsl���� � ��'�'�� � -�2�7�-�-�e�4�4�Q�7� -��M�M�$��,�,�E� � ��������r-c��t�d|j��tj�|j��s"t�d|j��dSt|jd��5}|���}||_ ddd��n #1swxYwYtd�|D����rd}nd}|rO|d� |� d����s!|d|� d��z|d<|j D]Y} t�d |��|�||z� d�����J#t$rY�VwxYwt|jd ��5}|�|��ddd��dS#1swxYwYdS) NzRemoving pth entries from %s:z.Cannot remove entries from nonexistent file %s�rbc3�K�|]}d|vV�� dS)s Nro)rd�lines r+rgz-UninstallPthEntries.remove..bs&����1�1�4�w�$��1�1�1�1�1�1r-z � �����zutf-8zRemoving entry: %s�wb)r�r�r'r$r%r��warningr � readlinesr)rirP�encoder(r�rJ� writelines)r�r�lines�endliner�s r+r�zUninstallPthEntries.removeWs7�����6�� �B�B�B��w�~�~�d�i�(�(� � �N�N�K�T�Y� W� W� W� �F� �$�)�T� "� "� &�b��L�L�N�N�E� %�D� � &� &� &� &� &� &� &� &� &� &� &���� &� &� &� &� �1�1�5�1�1�1� 1� 1� ��G�G��G� � <��r��+�+�G�N�N�7�,C�,C�D�D� <��b� �G�N�N�7�$;�$;�;�E�"�I��\� � �E� ����3�U�;�;�;�� � �e�g�o�5�5�g�>�>�?�?�?�?��� � � ��� ���� �$�)�T� "� "� !�b� �M�M�%� � � � !� !� !� !� !� !� !� !� !� !� !� !���� !� !� !� !� !� !s7�<B$�$B(�+B(�(AE/�/ E<�;E<�F7�7F;�>F;c�&�|j�"t�d|j��dSt�d|j��t |jd��5}|�|j��ddd��n #1swxYwYdS)Nz.Cannot roll back changes to %s, none were madeFz!Rolling %s back to previous stater5T)r)r�r�r'r�r r9)r�rs r+r�zUninstallPthEntries.rollbackrs��� � � $� �L�L�I�4�9� U� U� U��5�� � �8�$�)�D�D�D� �$�)�T� "� "� -�b� �M�M�$�+� ,� ,� ,� -� -� -� -� -� -� -� -� -� -� -���� -� -� -� -��ts�B�B � B r�) r�r�r�r�r�r5r�r�r�ror-r+r�r�Bs�������8��8��8�8�8�8�  ��  ��  �  �  �  �!�!�!�!�6�$������r-r�)9rDr9r$r�r�importlib.utilr�typingrrrrrr r r r � pip._vendorr �pip._vendor.pkg_resourcesr�pip._internal.exceptionsr�pip._internal.locationsrr�pip._internal.utils.compatr�pip._internal.utils.egg_linkr�pip._internal.utils.loggingrr�pip._internal.utils.miscrrrrrrr�pip._internal.utils.temp_dirrrr�r�r�r�r,r;rZrlr�r�r�r�r�ror-r+�rHsg�� � � � ����� � � � � � � � �����,�,�,�,�,�,�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�V�%�%�%�%�%�%�2�2�2�2�2�2�8�8�8�8�8�8�@�@�@�@�@�@�@�@�.�.�.�.�.�.�D�D�D�D�D�D�=�=�=�=�=�=�=�=�������������������N�M�M�M�M�M�M�M� ��8� � ��� ��3�����c������* ���h�s�m�+�,� ��#�x��}�:L�1M� � � � � �(�|�(��� �(�(�(� ��(�V�8�C�=��S��X�����&A�x��}�A��S��A�A�A�A�D/"�x��}�/"��s�3�x��S��?Q�9R�/"�/"�/"�/"�df!�f!�f!�f!�f!�f!�f!�f!�RC�C�C�C�C�C�C�C�L7�7�7�7�7�7�7�7�7�7r-