metarm commited on
Commit
945aae0
·
verified ·
1 Parent(s): 18eec35

Upload folder using huggingface_hub (part 4)

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +8 -0
  2. .venv/Lib/site-packages/pip-25.2.dist-info/INSTALLER +1 -0
  3. .venv/Lib/site-packages/pip-25.2.dist-info/METADATA +112 -0
  4. .venv/Lib/site-packages/pip-25.2.dist-info/RECORD +860 -0
  5. .venv/Lib/site-packages/pip-25.2.dist-info/REQUESTED +0 -0
  6. .venv/Lib/site-packages/pip-25.2.dist-info/WHEEL +5 -0
  7. .venv/Lib/site-packages/pip-25.2.dist-info/entry_points.txt +3 -0
  8. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/AUTHORS.txt +833 -0
  9. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/LICENSE.txt +20 -0
  10. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt +13 -0
  11. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE +20 -0
  12. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt +9 -0
  13. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt +284 -0
  14. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE +202 -0
  15. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md +31 -0
  16. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING +14 -0
  17. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE +3 -0
  18. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE +177 -0
  19. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD +23 -0
  20. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE +17 -0
  21. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE +21 -0
  22. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE +25 -0
  23. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE +21 -0
  24. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE +175 -0
  25. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE +13 -0
  26. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE +19 -0
  27. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE +21 -0
  28. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE-HEADER +3 -0
  29. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE +21 -0
  30. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE +21 -0
  31. .venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt +21 -0
  32. .venv/Lib/site-packages/pip-25.2.dist-info/top_level.txt +1 -0
  33. .venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py +107 -0
  34. .venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py +622 -0
  35. .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py +504 -0
  36. .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py +159 -0
  37. .venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py +221 -0
  38. .venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py +271 -0
  39. .venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py +435 -0
  40. .venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py +152 -0
  41. .venv/Lib/site-packages/pip/_vendor/vendor.txt +19 -0
  42. .venv/Lib/site-packages/pip/py.typed +4 -0
  43. .venv/Lib/site-packages/requests-2.34.2.dist-info/INSTALLER +1 -0
  44. .venv/Lib/site-packages/requests-2.34.2.dist-info/METADATA +120 -0
  45. .venv/Lib/site-packages/requests-2.34.2.dist-info/RECORD +47 -0
  46. .venv/Lib/site-packages/requests-2.34.2.dist-info/REQUESTED +0 -0
  47. .venv/Lib/site-packages/requests-2.34.2.dist-info/WHEEL +5 -0
  48. .venv/Lib/site-packages/requests-2.34.2.dist-info/licenses/LICENSE +175 -0
  49. .venv/Lib/site-packages/requests-2.34.2.dist-info/licenses/NOTICE +2 -0
  50. .venv/Lib/site-packages/requests-2.34.2.dist-info/top_level.txt +1 -0
.gitattributes CHANGED
@@ -40,3 +40,11 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
40
  .venv/Lib/site-packages/pip/_vendor/distlib/w64.exe filter=lfs diff=lfs merge=lfs -text
41
  .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc filter=lfs diff=lfs merge=lfs -text
42
  .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-314.pyc filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
40
  .venv/Lib/site-packages/pip/_vendor/distlib/w64.exe filter=lfs diff=lfs merge=lfs -text
41
  .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc filter=lfs diff=lfs merge=lfs -text
42
  .venv/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-314.pyc filter=lfs diff=lfs merge=lfs -text
43
+ .venv/Scripts/idna.exe filter=lfs diff=lfs merge=lfs -text
44
+ .venv/Scripts/normalizer.exe filter=lfs diff=lfs merge=lfs -text
45
+ .venv/Scripts/pip.exe filter=lfs diff=lfs merge=lfs -text
46
+ .venv/Scripts/pip3.14.exe filter=lfs diff=lfs merge=lfs -text
47
+ .venv/Scripts/pip3.exe filter=lfs diff=lfs merge=lfs -text
48
+ .venv/Scripts/python.exe filter=lfs diff=lfs merge=lfs -text
49
+ .venv/Scripts/pythonw.exe filter=lfs diff=lfs merge=lfs -text
50
+ node_modules/.bin/esbuild filter=lfs diff=lfs merge=lfs -text
.venv/Lib/site-packages/pip-25.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
.venv/Lib/site-packages/pip-25.2.dist-info/METADATA ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: pip
3
+ Version: 25.2
4
+ Summary: The PyPA recommended tool for installing Python packages.
5
+ Author-email: The pip developers <distutils-sig@python.org>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://pip.pypa.io/
8
+ Project-URL: Documentation, https://pip.pypa.io
9
+ Project-URL: Source, https://github.com/pypa/pip
10
+ Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Topic :: Software Development :: Build Tools
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Programming Language :: Python :: Implementation :: CPython
24
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
25
+ Requires-Python: >=3.9
26
+ Description-Content-Type: text/x-rst
27
+ License-File: AUTHORS.txt
28
+ License-File: LICENSE.txt
29
+ License-File: src/pip/_vendor/msgpack/COPYING
30
+ License-File: src/pip/_vendor/cachecontrol/LICENSE.txt
31
+ License-File: src/pip/_vendor/certifi/LICENSE
32
+ License-File: src/pip/_vendor/dependency_groups/LICENSE.txt
33
+ License-File: src/pip/_vendor/distlib/LICENSE.txt
34
+ License-File: src/pip/_vendor/distro/LICENSE
35
+ License-File: src/pip/_vendor/idna/LICENSE.md
36
+ License-File: src/pip/_vendor/packaging/LICENSE
37
+ License-File: src/pip/_vendor/packaging/LICENSE.APACHE
38
+ License-File: src/pip/_vendor/packaging/LICENSE.BSD
39
+ License-File: src/pip/_vendor/pkg_resources/LICENSE
40
+ License-File: src/pip/_vendor/platformdirs/LICENSE
41
+ License-File: src/pip/_vendor/pygments/LICENSE
42
+ License-File: src/pip/_vendor/pyproject_hooks/LICENSE
43
+ License-File: src/pip/_vendor/requests/LICENSE
44
+ License-File: src/pip/_vendor/resolvelib/LICENSE
45
+ License-File: src/pip/_vendor/rich/LICENSE
46
+ License-File: src/pip/_vendor/tomli/LICENSE
47
+ License-File: src/pip/_vendor/tomli/LICENSE-HEADER
48
+ License-File: src/pip/_vendor/tomli_w/LICENSE
49
+ License-File: src/pip/_vendor/truststore/LICENSE
50
+ License-File: src/pip/_vendor/urllib3/LICENSE.txt
51
+ Dynamic: license-file
52
+
53
+ pip - The Python Package Installer
54
+ ==================================
55
+
56
+ .. |pypi-version| image:: https://img.shields.io/pypi/v/pip.svg
57
+ :target: https://pypi.org/project/pip/
58
+ :alt: PyPI
59
+
60
+ .. |python-versions| image:: https://img.shields.io/pypi/pyversions/pip
61
+ :target: https://pypi.org/project/pip
62
+ :alt: PyPI - Python Version
63
+
64
+ .. |docs-badge| image:: https://readthedocs.org/projects/pip/badge/?version=latest
65
+ :target: https://pip.pypa.io/en/latest
66
+ :alt: Documentation
67
+
68
+ |pypi-version| |python-versions| |docs-badge|
69
+
70
+ pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
71
+
72
+ Please take a look at our documentation for how to install and use pip:
73
+
74
+ * `Installation`_
75
+ * `Usage`_
76
+
77
+ We release updates regularly, with a new version every 3 months. Find more details in our documentation:
78
+
79
+ * `Release notes`_
80
+ * `Release process`_
81
+
82
+ If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
83
+
84
+ * `Issue tracking`_
85
+ * `Discourse channel`_
86
+ * `User IRC`_
87
+
88
+ If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
89
+
90
+ * `GitHub page`_
91
+ * `Development documentation`_
92
+ * `Development IRC`_
93
+
94
+ Code of Conduct
95
+ ---------------
96
+
97
+ Everyone interacting in the pip project's codebases, issue trackers, chat
98
+ rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
99
+
100
+ .. _package installer: https://packaging.python.org/guides/tool-recommendations/
101
+ .. _Python Package Index: https://pypi.org
102
+ .. _Installation: https://pip.pypa.io/en/stable/installation/
103
+ .. _Usage: https://pip.pypa.io/en/stable/
104
+ .. _Release notes: https://pip.pypa.io/en/stable/news.html
105
+ .. _Release process: https://pip.pypa.io/en/latest/development/release-process/
106
+ .. _GitHub page: https://github.com/pypa/pip
107
+ .. _Development documentation: https://pip.pypa.io/en/latest/development
108
+ .. _Issue tracking: https://github.com/pypa/pip/issues
109
+ .. _Discourse channel: https://discuss.python.org/c/packaging
110
+ .. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
111
+ .. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
112
+ .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
.venv/Lib/site-packages/pip-25.2.dist-info/RECORD ADDED
@@ -0,0 +1,860 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ../../Scripts/pip.exe,sha256=fvx7keVAbo_1gkHW2N3zQeQpY6A_cELsaL4pi611qM8,108398
2
+ ../../Scripts/pip3.14.exe,sha256=fvx7keVAbo_1gkHW2N3zQeQpY6A_cELsaL4pi611qM8,108398
3
+ ../../Scripts/pip3.exe,sha256=fvx7keVAbo_1gkHW2N3zQeQpY6A_cELsaL4pi611qM8,108398
4
+ pip-25.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
5
+ pip-25.2.dist-info/METADATA,sha256=l6OtFNcf2JFKOPJK9bMaH5-usFrqZqSvQNl51tetIp8,4744
6
+ pip-25.2.dist-info/RECORD,,
7
+ pip-25.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ pip-25.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
9
+ pip-25.2.dist-info/entry_points.txt,sha256=eeIjuzfnfR2PrhbjnbzFU6MnSS70kZLxwaHHq6M-bD0,87
10
+ pip-25.2.dist-info/licenses/AUTHORS.txt,sha256=ioEfMGkkizcTcIPdvjh-kYymO1E9I9dvzHjLUlKS5m8,11385
11
+ pip-25.2.dist-info/licenses/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
12
+ pip-25.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt,sha256=hu7uh74qQ_P_H1ZJb0UfaSQ5JvAl_tuwM2ZsMExMFhs,558
13
+ pip-25.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE,sha256=6TcW2mucDVpKHfYP5pWzcPBpVgPSH2-D8FPkLPwQyvc,989
14
+ pip-25.2.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt,sha256=GrNuPipLqGMWJThPh-ngkdsfrtA0xbIzJbMjmr8sxSU,1099
15
+ pip-25.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531
16
+ pip-25.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
17
+ pip-25.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md,sha256=pZ8LDvNjWHQQmkRhykT_enDVBpboFHZ7-vch1Mmw2w8,1541
18
+ pip-25.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING,sha256=SS3tuoXaWHL3jmCRvNH-pHTWYNNay03ulkuKqz8AdCc,614
19
+ pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
20
+ pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
21
+ pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
22
+ pip-25.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE,sha256=htoPAa6uRjSKPD1GUZXcHOzN55956HdppkuNoEsqR0E,1023
23
+ pip-25.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089
24
+ pip-25.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE,sha256=qdZvHVJt8C4p3Oc0NtNOVuhjL0bCdbvf_HBWnogvnxc,1331
25
+ pip-25.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE,sha256=GyKwSbUmfW38I6Z79KhNjsBLn9-xpR02DkK0NCyLQVQ,1081
26
+ pip-25.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
27
+ pip-25.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE,sha256=84j9OMrRMRLB3A9mm76A5_hFQe26-3LzAw0sp2QsPJ0,751
28
+ pip-25.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE,sha256=3u18F6QxgVgZCj6iOcyHmlpQJxzruYrnAl9I--WNyhU,1056
29
+ pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
30
+ pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE-HEADER,sha256=l86TMJBaFy3ehw7gNh2Jvrlbo70PRUV5aqkajAGkNTE,121
31
+ pip-25.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE,sha256=uAgWsNUwuKzLTCIReDeQmEpuO2GSLCte6S8zcqsnQv4,1072
32
+ pip-25.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE,sha256=M757fo-k_Rmxdg4ajtimaL2rhSyRtpLdQUJLy3Jan8o,1086
33
+ pip-25.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt,sha256=w3vxhuJ8-dvpYZ5V7f486nswCRzrPaY8fay-Dm13kHs,1115
34
+ pip-25.2.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
35
+ pip/__init__.py,sha256=_lgs5Mfp0t7AGtI7sTVwxKWquz_vahWWH9kKO1cJusA,353
36
+ pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854
37
+ pip/__pip-runner__.py,sha256=JOoEZTwrtv7jRaXBkgSQKAE04yNyfFmGHxqpHiGHvL0,1450
38
+ pip/__pycache__/__init__.cpython-314.pyc,,
39
+ pip/__pycache__/__main__.cpython-314.pyc,,
40
+ pip/__pycache__/__pip-runner__.cpython-314.pyc,,
41
+ pip/_internal/__init__.py,sha256=S7i9Dn9aSZS0MG-2Wrve3dV9TImPzvQn5jjhp9t_uf0,511
42
+ pip/_internal/__pycache__/__init__.cpython-314.pyc,,
43
+ pip/_internal/__pycache__/build_env.cpython-314.pyc,,
44
+ pip/_internal/__pycache__/cache.cpython-314.pyc,,
45
+ pip/_internal/__pycache__/configuration.cpython-314.pyc,,
46
+ pip/_internal/__pycache__/exceptions.cpython-314.pyc,,
47
+ pip/_internal/__pycache__/main.cpython-314.pyc,,
48
+ pip/_internal/__pycache__/pyproject.cpython-314.pyc,,
49
+ pip/_internal/__pycache__/self_outdated_check.cpython-314.pyc,,
50
+ pip/_internal/__pycache__/wheel_builder.cpython-314.pyc,,
51
+ pip/_internal/build_env.py,sha256=5_-O5G0QtCeFKHAezqAz0IZ5_O7qCYZ-Bxddu9idpYs,11566
52
+ pip/_internal/cache.py,sha256=rWXvsuFY7GgPERhiNp3yZHFGKdvDvkZRn2n4mXn8lAg,10364
53
+ pip/_internal/cli/__init__.py,sha256=Iqg_tKA771XuMO1P4t_sDHnSKPzkUb9D0DqunAmw_ko,131
54
+ pip/_internal/cli/__pycache__/__init__.cpython-314.pyc,,
55
+ pip/_internal/cli/__pycache__/autocompletion.cpython-314.pyc,,
56
+ pip/_internal/cli/__pycache__/base_command.cpython-314.pyc,,
57
+ pip/_internal/cli/__pycache__/cmdoptions.cpython-314.pyc,,
58
+ pip/_internal/cli/__pycache__/command_context.cpython-314.pyc,,
59
+ pip/_internal/cli/__pycache__/index_command.cpython-314.pyc,,
60
+ pip/_internal/cli/__pycache__/main.cpython-314.pyc,,
61
+ pip/_internal/cli/__pycache__/main_parser.cpython-314.pyc,,
62
+ pip/_internal/cli/__pycache__/parser.cpython-314.pyc,,
63
+ pip/_internal/cli/__pycache__/progress_bars.cpython-314.pyc,,
64
+ pip/_internal/cli/__pycache__/req_command.cpython-314.pyc,,
65
+ pip/_internal/cli/__pycache__/spinners.cpython-314.pyc,,
66
+ pip/_internal/cli/__pycache__/status_codes.cpython-314.pyc,,
67
+ pip/_internal/cli/autocompletion.py,sha256=ZG2cM03nlcNrs-WG_SFTW46isx9s2Go5lUD_8-iv70o,7193
68
+ pip/_internal/cli/base_command.py,sha256=1Nx919JRFlgURLis9XYJwtbyEEjRJa_NdHwM6iBkZvY,8716
69
+ pip/_internal/cli/cmdoptions.py,sha256=99bW3xpXJ8Mr59OGbG7d7vN7CGPLPwi1nTmE3eMc8lE,32032
70
+ pip/_internal/cli/command_context.py,sha256=kmu3EWZbfBega1oDamnGJTA_UaejhIQNuMj2CVmMXu0,817
71
+ pip/_internal/cli/index_command.py,sha256=AHk6eSqboaxTXbG3v9mBrVd0dCK1MtW4w3PVudnj0WE,5717
72
+ pip/_internal/cli/main.py,sha256=K9PtpRdg6uBrVKk8S2VZ14fAN0kP-cnA1o-FtJCN_OQ,2815
73
+ pip/_internal/cli/main_parser.py,sha256=UugPD-hF1WtNQdow_WWduDLUH1DvElpc7EeUWjUkcNo,4329
74
+ pip/_internal/cli/parser.py,sha256=sAOebBa5_0rRAlmBy8myMPFHQZb-bbCH1xpIJDaXaLs,10928
75
+ pip/_internal/cli/progress_bars.py,sha256=nRTWNof-FjHfvirvECXIh7T7eAynTUVPTyHENfpbWiU,4668
76
+ pip/_internal/cli/req_command.py,sha256=pXT_jAwcmO9PjJ1-Pl1VevBgr5pnxHsyPZUBzAfqQg8,13081
77
+ pip/_internal/cli/spinners.py,sha256=EJzZIZNyUtJljp3-WjcsyIrqxW-HUsfWzhuW84n_Tqw,7362
78
+ pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
79
+ pip/_internal/commands/__init__.py,sha256=aNeCbQurGWihfhQq7BqaLXHqWDQ0i3I04OS7kxK6plQ,4026
80
+ pip/_internal/commands/__pycache__/__init__.cpython-314.pyc,,
81
+ pip/_internal/commands/__pycache__/cache.cpython-314.pyc,,
82
+ pip/_internal/commands/__pycache__/check.cpython-314.pyc,,
83
+ pip/_internal/commands/__pycache__/completion.cpython-314.pyc,,
84
+ pip/_internal/commands/__pycache__/configuration.cpython-314.pyc,,
85
+ pip/_internal/commands/__pycache__/debug.cpython-314.pyc,,
86
+ pip/_internal/commands/__pycache__/download.cpython-314.pyc,,
87
+ pip/_internal/commands/__pycache__/freeze.cpython-314.pyc,,
88
+ pip/_internal/commands/__pycache__/hash.cpython-314.pyc,,
89
+ pip/_internal/commands/__pycache__/help.cpython-314.pyc,,
90
+ pip/_internal/commands/__pycache__/index.cpython-314.pyc,,
91
+ pip/_internal/commands/__pycache__/inspect.cpython-314.pyc,,
92
+ pip/_internal/commands/__pycache__/install.cpython-314.pyc,,
93
+ pip/_internal/commands/__pycache__/list.cpython-314.pyc,,
94
+ pip/_internal/commands/__pycache__/lock.cpython-314.pyc,,
95
+ pip/_internal/commands/__pycache__/search.cpython-314.pyc,,
96
+ pip/_internal/commands/__pycache__/show.cpython-314.pyc,,
97
+ pip/_internal/commands/__pycache__/uninstall.cpython-314.pyc,,
98
+ pip/_internal/commands/__pycache__/wheel.cpython-314.pyc,,
99
+ pip/_internal/commands/cache.py,sha256=OrrLS6EJEha_55yPa9fTaOaonw-VpH4_lVhjxuOTChQ,8230
100
+ pip/_internal/commands/check.py,sha256=hVFBQezQ3zj4EydoWbFQj_afPUppMt7r9JPAlY22U6Y,2244
101
+ pip/_internal/commands/completion.py,sha256=MDwhTOBjlM4WEbOhgbhrWnlDm710i4FMjop3RBXXXCc,4530
102
+ pip/_internal/commands/configuration.py,sha256=6gNOGrVWnOLU15zUnAiNuOMhf76RRIZvCdVD0degPRk,10105
103
+ pip/_internal/commands/debug.py,sha256=_8IqM8Fx1_lY2STu_qspr63tufF7zyFJCyYAXtxz0N4,6805
104
+ pip/_internal/commands/download.py,sha256=GGBSxhORV0mrad8STgORfvjRGh1qS2plvpXFNbxgcps,5249
105
+ pip/_internal/commands/freeze.py,sha256=fxoW8AAc-bAqB_fXdNq2VnZ3JfWkFMg-bR6LcdDVO7A,3099
106
+ pip/_internal/commands/hash.py,sha256=GO9pRN3wXC2kQaovK57TaLYBMc3IltOH92O6QEw6YE0,1679
107
+ pip/_internal/commands/help.py,sha256=Bz3LcjNQXkz4Cu__pL4CZ86o4-HNLZj1NZWdlJhjuu0,1108
108
+ pip/_internal/commands/index.py,sha256=8GMBVI5NvhRRHBSUq27YxDIE02DpvdJ_6qiBFgGd1co,5243
109
+ pip/_internal/commands/inspect.py,sha256=ogm4UT7LRo8bIQcWUS1IiA25QdD4VHLa7JaPAodDttM,3177
110
+ pip/_internal/commands/install.py,sha256=AIO-Um49e3GqMOk2SmHCt45A0W0-YhKXcpr5okjHh80,30080
111
+ pip/_internal/commands/list.py,sha256=I4ZH604E5gpcROxEXA7eyaNEFhXx3VFVqvpscz_Ps_A,13514
112
+ pip/_internal/commands/lock.py,sha256=SxXGnU2EH-TG-fs9fuZHAuMOH15Lzy1K7e_KJ4vtSr0,5917
113
+ pip/_internal/commands/search.py,sha256=zbMsX_YASj6kXA6XIBgTDv0bGK51xG-CV3IynZJcE-c,5782
114
+ pip/_internal/commands/show.py,sha256=oLVJIfKWmDKm0SsQGEi3pozNiqrXjTras_fbBSYKpBA,8066
115
+ pip/_internal/commands/uninstall.py,sha256=CsOihqvb6ZA6O67L70oXeoLHeOfNzMM88H9g-9aocgw,3868
116
+ pip/_internal/commands/wheel.py,sha256=vcNgnhxwilocRQJEBdWQvJ8qvO0RfWmz9LwrUBadvYE,6322
117
+ pip/_internal/configuration.py,sha256=BomQ3pC84J6zCXDQpND_OmFY7mubE9cMBZVohNUzMvY,14587
118
+ pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
119
+ pip/_internal/distributions/__pycache__/__init__.cpython-314.pyc,,
120
+ pip/_internal/distributions/__pycache__/base.cpython-314.pyc,,
121
+ pip/_internal/distributions/__pycache__/installed.cpython-314.pyc,,
122
+ pip/_internal/distributions/__pycache__/sdist.cpython-314.pyc,,
123
+ pip/_internal/distributions/__pycache__/wheel.cpython-314.pyc,,
124
+ pip/_internal/distributions/base.py,sha256=l-OTCAIs25lsapejA6IYpPZxSM5-BET4sdZDkql8jiY,1830
125
+ pip/_internal/distributions/installed.py,sha256=kgIEE_1NzjZxLBSC-v5s64uOFZlVEt3aPrjTtL6x2XY,929
126
+ pip/_internal/distributions/sdist.py,sha256=gYgrzI0lstHJRKweOdL_m6LtqDxtfuo_yCL9HjmH-xw,6952
127
+ pip/_internal/distributions/wheel.py,sha256=_HbG0OehF8dwj4UX-xV__tXLwgPus9OjMEf2NTRqBbE,1364
128
+ pip/_internal/exceptions.py,sha256=bRTEn6Jlw-vxHjixtiu0K79jXJu0X5FVC0L62Bdb0KI,28974
129
+ pip/_internal/index/__init__.py,sha256=tzwMH_fhQeubwMqHdSivasg1cRgTSbNg2CiMVnzMmyU,29
130
+ pip/_internal/index/__pycache__/__init__.cpython-314.pyc,,
131
+ pip/_internal/index/__pycache__/collector.cpython-314.pyc,,
132
+ pip/_internal/index/__pycache__/package_finder.cpython-314.pyc,,
133
+ pip/_internal/index/__pycache__/sources.cpython-314.pyc,,
134
+ pip/_internal/index/collector.py,sha256=PCB3thVWRiSBowGtpv1elIPFc-GvEqhZiNgZD7b0vBc,16185
135
+ pip/_internal/index/package_finder.py,sha256=Kd2FmWJFAcEg2Sy2pTGQX8WPFC8B9U_3b1VK7i8sx9o,38827
136
+ pip/_internal/index/sources.py,sha256=nXJkOjhLy-O2FsrKU9RIqCOqgY2PsoKWybtZjjRgqU0,8639
137
+ pip/_internal/locations/__init__.py,sha256=2SADX0Gr9BIpx19AO7Feq89nOmBQGEbl1IWjBpnaE9E,14185
138
+ pip/_internal/locations/__pycache__/__init__.cpython-314.pyc,,
139
+ pip/_internal/locations/__pycache__/_distutils.cpython-314.pyc,,
140
+ pip/_internal/locations/__pycache__/_sysconfig.cpython-314.pyc,,
141
+ pip/_internal/locations/__pycache__/base.cpython-314.pyc,,
142
+ pip/_internal/locations/_distutils.py,sha256=jpFj4V00rD9IR3vA9TqrGkwcdNVFc58LsChZavge9JY,5975
143
+ pip/_internal/locations/_sysconfig.py,sha256=NhcEi1_25w9cTTcH4RyOjD4UHW6Ijks0uKy1PL1_j_8,7716
144
+ pip/_internal/locations/base.py,sha256=AImjYJWxOtDkc0KKc6Y4Gz677cg91caMA4L94B9FZEg,2550
145
+ pip/_internal/main.py,sha256=1cHqjsfFCrMFf3B5twzocxTJUdHMLoXUpy5lJoFqUi8,338
146
+ pip/_internal/metadata/__init__.py,sha256=a19B00IsX25khBt8oWWy6_kKgjCM4zeh-FqYteCOFwA,5714
147
+ pip/_internal/metadata/__pycache__/__init__.cpython-314.pyc,,
148
+ pip/_internal/metadata/__pycache__/_json.cpython-314.pyc,,
149
+ pip/_internal/metadata/__pycache__/base.cpython-314.pyc,,
150
+ pip/_internal/metadata/__pycache__/pkg_resources.cpython-314.pyc,,
151
+ pip/_internal/metadata/_json.py,sha256=hNvnMHOXLAyNlzirWhPL9Nx2CvCqa1iRma6Osq1YfV8,2711
152
+ pip/_internal/metadata/base.py,sha256=BGuMenlcQT8i7j9iclrfdC3vSwgvhr8gjn955cCy16s,25420
153
+ pip/_internal/metadata/importlib/__init__.py,sha256=jUUidoxnHcfITHHaAWG1G2i5fdBYklv_uJcjo2x7VYE,135
154
+ pip/_internal/metadata/importlib/__pycache__/__init__.cpython-314.pyc,,
155
+ pip/_internal/metadata/importlib/__pycache__/_compat.cpython-314.pyc,,
156
+ pip/_internal/metadata/importlib/__pycache__/_dists.cpython-314.pyc,,
157
+ pip/_internal/metadata/importlib/__pycache__/_envs.cpython-314.pyc,,
158
+ pip/_internal/metadata/importlib/_compat.py,sha256=sneVh4_6WxQZK4ljdl3ylVuP-q0ttSqbgl9mWt0HnOg,2804
159
+ pip/_internal/metadata/importlib/_dists.py,sha256=aOUgCX_AtA8B-lWLu-HfXA-ivMJWNxHPAohVcpQj2g4,8259
160
+ pip/_internal/metadata/importlib/_envs.py,sha256=H3qVLXVh4LWvrPvu_ekXf3dfbtwnlhNJQP2pxXpccfU,5333
161
+ pip/_internal/metadata/pkg_resources.py,sha256=NO76ZrfR2-LKJTyaXrmQoGhmJMArALvacrlZHViSDT8,10544
162
+ pip/_internal/models/__init__.py,sha256=AjmCEBxX_MH9f_jVjIGNCFJKYCYeSEe18yyvNx4uRKQ,62
163
+ pip/_internal/models/__pycache__/__init__.cpython-314.pyc,,
164
+ pip/_internal/models/__pycache__/candidate.cpython-314.pyc,,
165
+ pip/_internal/models/__pycache__/direct_url.cpython-314.pyc,,
166
+ pip/_internal/models/__pycache__/format_control.cpython-314.pyc,,
167
+ pip/_internal/models/__pycache__/index.cpython-314.pyc,,
168
+ pip/_internal/models/__pycache__/installation_report.cpython-314.pyc,,
169
+ pip/_internal/models/__pycache__/link.cpython-314.pyc,,
170
+ pip/_internal/models/__pycache__/pylock.cpython-314.pyc,,
171
+ pip/_internal/models/__pycache__/scheme.cpython-314.pyc,,
172
+ pip/_internal/models/__pycache__/search_scope.cpython-314.pyc,,
173
+ pip/_internal/models/__pycache__/selection_prefs.cpython-314.pyc,,
174
+ pip/_internal/models/__pycache__/target_python.cpython-314.pyc,,
175
+ pip/_internal/models/__pycache__/wheel.cpython-314.pyc,,
176
+ pip/_internal/models/candidate.py,sha256=zzgFRuw_kWPjKpGw7LC0ZUMD2CQ2EberUIYs8izjdCA,753
177
+ pip/_internal/models/direct_url.py,sha256=4NMWacu_QzPPWREC1te7v6Wfv-2HkI4tvSJF-CBgLh4,6555
178
+ pip/_internal/models/format_control.py,sha256=PwemYG1L27BM0f1KP61rm24wShENFyxqlD1TWu34alc,2471
179
+ pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
180
+ pip/_internal/models/installation_report.py,sha256=cqfWJ93ThCxjcacqSWryOCD2XtIn1CZrgzZxAv5FQZ0,2839
181
+ pip/_internal/models/link.py,sha256=h4lI8MaDA7DTIxIJ_NgDE64EE4h1sX3AB23Y1Qu8W-k,21793
182
+ pip/_internal/models/pylock.py,sha256=Vmaa71gOSV0ZYzRgWiIm4KwVbClaahMcuvKCkP_ZznA,6211
183
+ pip/_internal/models/scheme.py,sha256=PakmHJM3e8OOWSZFtfz1Az7f1meONJnkGuQxFlt3wBE,575
184
+ pip/_internal/models/search_scope.py,sha256=1hxU2IVsAaLZVjp0CbzJbYaYzCxv72_Qbg3JL0qhXo0,4507
185
+ pip/_internal/models/selection_prefs.py,sha256=lgYyo4W8lb22wsYx2ElBBB0cvSNlBVgucwBzL43dfzE,2016
186
+ pip/_internal/models/target_python.py,sha256=I0eFS-eia3kwhrOvgsphFZtNAB2IwXZ9Sr9fp6IjBP4,4243
187
+ pip/_internal/models/wheel.py,sha256=xWO0K-YanSL3OfMZUN1gHlEUV0YJOVYMQ4wrwmA9Zis,5526
188
+ pip/_internal/network/__init__.py,sha256=FMy06P__y6jMjUc8z3ZcQdKF-pmZ2zM14_vBeHPGhUI,49
189
+ pip/_internal/network/__pycache__/__init__.cpython-314.pyc,,
190
+ pip/_internal/network/__pycache__/auth.cpython-314.pyc,,
191
+ pip/_internal/network/__pycache__/cache.cpython-314.pyc,,
192
+ pip/_internal/network/__pycache__/download.cpython-314.pyc,,
193
+ pip/_internal/network/__pycache__/lazy_wheel.cpython-314.pyc,,
194
+ pip/_internal/network/__pycache__/session.cpython-314.pyc,,
195
+ pip/_internal/network/__pycache__/utils.cpython-314.pyc,,
196
+ pip/_internal/network/__pycache__/xmlrpc.cpython-314.pyc,,
197
+ pip/_internal/network/auth.py,sha256=uAwRGAYnVtgNSZm4HMC3BMACkgA7ku4m8wupiX6LpK8,20681
198
+ pip/_internal/network/cache.py,sha256=u5LtQbnCzMU6vFT0eUUcYe6iKiwALMqrn1jUZj4CqaY,5302
199
+ pip/_internal/network/download.py,sha256=HgsFvTkPDdgg0zUehose_J-542-9R0FpyipRw5BhxAM,12682
200
+ pip/_internal/network/lazy_wheel.py,sha256=5H7_s-_AK6br1K5NFcyUsiocK9E6vwrJY5kzwjMv0EM,7651
201
+ pip/_internal/network/session.py,sha256=eE-VUIJGU9YeeaVy7tVAvMRWigMsyuAMpxkjlbptbjo,19188
202
+ pip/_internal/network/utils.py,sha256=ACsXd1msqNCidHVXsu7LHUSr8NgaypcOKQ4KG-Z_wJM,4091
203
+ pip/_internal/network/xmlrpc.py,sha256=_-Rnk3vOff8uF9hAGmT6SLALflY1gMBcbGwS12fb_Y4,1830
204
+ pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
+ pip/_internal/operations/__pycache__/__init__.cpython-314.pyc,,
206
+ pip/_internal/operations/__pycache__/check.cpython-314.pyc,,
207
+ pip/_internal/operations/__pycache__/freeze.cpython-314.pyc,,
208
+ pip/_internal/operations/__pycache__/prepare.cpython-314.pyc,,
209
+ pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ pip/_internal/operations/build/__pycache__/__init__.cpython-314.pyc,,
211
+ pip/_internal/operations/build/__pycache__/build_tracker.cpython-314.pyc,,
212
+ pip/_internal/operations/build/__pycache__/metadata.cpython-314.pyc,,
213
+ pip/_internal/operations/build/__pycache__/metadata_editable.cpython-314.pyc,,
214
+ pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-314.pyc,,
215
+ pip/_internal/operations/build/__pycache__/wheel.cpython-314.pyc,,
216
+ pip/_internal/operations/build/__pycache__/wheel_editable.cpython-314.pyc,,
217
+ pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-314.pyc,,
218
+ pip/_internal/operations/build/build_tracker.py,sha256=W3b5cmkMWPaE6QIwfzsTayJo7-OlxFHWDxfPuax1KcE,4771
219
+ pip/_internal/operations/build/metadata.py,sha256=INHaeiRfOiLYCXApfDNRo9Cw2xI4VwTc0KItvfdfOjk,1421
220
+ pip/_internal/operations/build/metadata_editable.py,sha256=oWudMsnjy4loO_Jy7g4N9nxsnaEX_iDlVRgCy7pu1rs,1509
221
+ pip/_internal/operations/build/metadata_legacy.py,sha256=wv8cFA0wTqF62Jlm9QwloYZsofOyQ7sWBBmvCcVvn1k,2189
222
+ pip/_internal/operations/build/wheel.py,sha256=toBJE5atKJGsSckY5ztVAQpRss25f049f-nJaiJsiD8,1080
223
+ pip/_internal/operations/build/wheel_editable.py,sha256=Djx7hZqhejgYUcdQD5p4mn7AVFN3VQ7bOSs7b90TtOI,1422
224
+ pip/_internal/operations/build/wheel_legacy.py,sha256=LaHpG4_s6415iLjuTb6seO3JIJ7097yQUIthcmpqaOY,3616
225
+ pip/_internal/operations/check.py,sha256=yC2XWth6iehGGE_fj7XRJLjVKBsTIG3ZoWRkFi3rOwc,5894
226
+ pip/_internal/operations/freeze.py,sha256=PDdY-y_ZtZZJLAKcaWPIGRKAGW7DXR48f0aMRU0j7BA,9854
227
+ pip/_internal/operations/install/__init__.py,sha256=ak-UETcQPKlFZaWoYKWu5QVXbpFBvg0sXc3i0O4vSYY,50
228
+ pip/_internal/operations/install/__pycache__/__init__.cpython-314.pyc,,
229
+ pip/_internal/operations/install/__pycache__/editable_legacy.cpython-314.pyc,,
230
+ pip/_internal/operations/install/__pycache__/wheel.cpython-314.pyc,,
231
+ pip/_internal/operations/install/editable_legacy.py,sha256=zS6Hm-9SHcrVuA_9Irc9Qc8CIoFLDMZiSvi5rizZe34,1311
232
+ pip/_internal/operations/install/wheel.py,sha256=8aepxxAFmnzZFtcMCv-1I4T_maEkQd4hXZztYWE4yR0,27956
233
+ pip/_internal/operations/prepare.py,sha256=gdbQUAjxLqqz8P2KFem2OEJ_6V3aTuozQkiBLfCCVAU,28613
234
+ pip/_internal/pyproject.py,sha256=T72qz0buaY0s-mgrXLUU1sONf4Rk97dJu0qpniBCGU8,7233
235
+ pip/_internal/req/__init__.py,sha256=vM0bWAl3By5ALRIXWmKdkMca18KQfbGXVJZm3Igpwmg,3122
236
+ pip/_internal/req/__pycache__/__init__.cpython-314.pyc,,
237
+ pip/_internal/req/__pycache__/constructors.cpython-314.pyc,,
238
+ pip/_internal/req/__pycache__/req_dependency_group.cpython-314.pyc,,
239
+ pip/_internal/req/__pycache__/req_file.cpython-314.pyc,,
240
+ pip/_internal/req/__pycache__/req_install.cpython-314.pyc,,
241
+ pip/_internal/req/__pycache__/req_set.cpython-314.pyc,,
242
+ pip/_internal/req/__pycache__/req_uninstall.cpython-314.pyc,,
243
+ pip/_internal/req/constructors.py,sha256=QlLjBIg5xPxyQx_hGGB7Fz527ruAXC6nbVMoGfXzNnM,18320
244
+ pip/_internal/req/req_dependency_group.py,sha256=0yEQCUaO5Bza66Y3D5o9JRf0qII5QgCRugn1x5aRivA,2618
245
+ pip/_internal/req/req_file.py,sha256=j_1PcBDO0aKb8pjjRMsZQrwts5YNrKsrHjPyV56XoHo,20161
246
+ pip/_internal/req/req_install.py,sha256=N4LxV9LHimgle5zEkNFk9WSfi51KXvK9y73mvYl9uig,35718
247
+ pip/_internal/req/req_set.py,sha256=awkqIXnYA4Prmsj0Qb3zhqdbYUmXd-1o0P-KZ3mvRQs,2828
248
+ pip/_internal/req/req_uninstall.py,sha256=dCmOHt-9RaJBq921L4tMH3PmIBDetGplnbjRKXmGt00,24099
249
+ pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
+ pip/_internal/resolution/__pycache__/__init__.cpython-314.pyc,,
251
+ pip/_internal/resolution/__pycache__/base.cpython-314.pyc,,
252
+ pip/_internal/resolution/base.py,sha256=RIsqSP79olPdOgtPKW-oOQ364ICVopehA6RfGkRfe2s,577
253
+ pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
+ pip/_internal/resolution/legacy/__pycache__/__init__.cpython-314.pyc,,
255
+ pip/_internal/resolution/legacy/__pycache__/resolver.cpython-314.pyc,,
256
+ pip/_internal/resolution/legacy/resolver.py,sha256=bwUqE66etz2bcPabqxed18-iyqqb-kx3Er2aT6GeUJY,24060
257
+ pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
258
+ pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-314.pyc,,
259
+ pip/_internal/resolution/resolvelib/__pycache__/base.cpython-314.pyc,,
260
+ pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-314.pyc,,
261
+ pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-314.pyc,,
262
+ pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-314.pyc,,
263
+ pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-314.pyc,,
264
+ pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-314.pyc,,
265
+ pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-314.pyc,,
266
+ pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-314.pyc,,
267
+ pip/_internal/resolution/resolvelib/base.py,sha256=_AoP0ZWlaSct8CRDn2ol3CbNn4zDtnh_0zQGjXASDKI,5047
268
+ pip/_internal/resolution/resolvelib/candidates.py,sha256=dblosDcMumdT075Y8D1yXiJrWF_wDgIGe_8hUQIneTw,20208
269
+ pip/_internal/resolution/resolvelib/factory.py,sha256=XdCpLq59oVIHMMekc2cgD7imcVD00_ioTnu9_k3iq3E,32577
270
+ pip/_internal/resolution/resolvelib/found_candidates.py,sha256=8bZYDCZLXSdLHy_s1o5f4r15HmKvqFUhzBUQOF21Lr4,6018
271
+ pip/_internal/resolution/resolvelib/provider.py,sha256=1TJC2o7F02aTMaoqa0Ayz45PrE-pQ5XshgGUmweESkk,11144
272
+ pip/_internal/resolution/resolvelib/reporter.py,sha256=atiTh1bnKc-KfG841nRw3dk0WbOhr_L8luJHcY0JoSs,3270
273
+ pip/_internal/resolution/resolvelib/requirements.py,sha256=z0gXmWfo03ynOnhF8kpj5SycgroerDhQV0VWzmAKAfg,8076
274
+ pip/_internal/resolution/resolvelib/resolver.py,sha256=f0fmYzB9G4wWxssfj4qerDi_F_8vjAaYPbGLb7N7tQw,13617
275
+ pip/_internal/self_outdated_check.py,sha256=wfikZmcGVIrnepL413-0rnQ3jeOA0unOKPle0Ovwoho,8326
276
+ pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
277
+ pip/_internal/utils/__pycache__/__init__.cpython-314.pyc,,
278
+ pip/_internal/utils/__pycache__/_jaraco_text.cpython-314.pyc,,
279
+ pip/_internal/utils/__pycache__/_log.cpython-314.pyc,,
280
+ pip/_internal/utils/__pycache__/appdirs.cpython-314.pyc,,
281
+ pip/_internal/utils/__pycache__/compat.cpython-314.pyc,,
282
+ pip/_internal/utils/__pycache__/compatibility_tags.cpython-314.pyc,,
283
+ pip/_internal/utils/__pycache__/datetime.cpython-314.pyc,,
284
+ pip/_internal/utils/__pycache__/deprecation.cpython-314.pyc,,
285
+ pip/_internal/utils/__pycache__/direct_url_helpers.cpython-314.pyc,,
286
+ pip/_internal/utils/__pycache__/egg_link.cpython-314.pyc,,
287
+ pip/_internal/utils/__pycache__/entrypoints.cpython-314.pyc,,
288
+ pip/_internal/utils/__pycache__/filesystem.cpython-314.pyc,,
289
+ pip/_internal/utils/__pycache__/filetypes.cpython-314.pyc,,
290
+ pip/_internal/utils/__pycache__/glibc.cpython-314.pyc,,
291
+ pip/_internal/utils/__pycache__/hashes.cpython-314.pyc,,
292
+ pip/_internal/utils/__pycache__/logging.cpython-314.pyc,,
293
+ pip/_internal/utils/__pycache__/misc.cpython-314.pyc,,
294
+ pip/_internal/utils/__pycache__/packaging.cpython-314.pyc,,
295
+ pip/_internal/utils/__pycache__/retry.cpython-314.pyc,,
296
+ pip/_internal/utils/__pycache__/setuptools_build.cpython-314.pyc,,
297
+ pip/_internal/utils/__pycache__/subprocess.cpython-314.pyc,,
298
+ pip/_internal/utils/__pycache__/temp_dir.cpython-314.pyc,,
299
+ pip/_internal/utils/__pycache__/unpacking.cpython-314.pyc,,
300
+ pip/_internal/utils/__pycache__/urls.cpython-314.pyc,,
301
+ pip/_internal/utils/__pycache__/virtualenv.cpython-314.pyc,,
302
+ pip/_internal/utils/__pycache__/wheel.cpython-314.pyc,,
303
+ pip/_internal/utils/_jaraco_text.py,sha256=M15uUPIh5NpP1tdUGBxRau6q1ZAEtI8-XyLEETscFfE,3350
304
+ pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
305
+ pip/_internal/utils/appdirs.py,sha256=LrzDPZMKVh0rubtCx9vu3XlZbLCSug6VSj4Qsvt66BA,1681
306
+ pip/_internal/utils/compat.py,sha256=C9LHXJAKkwAH8Hn3nPkz9EYK3rqPBeO_IXkOG2zzsdQ,2514
307
+ pip/_internal/utils/compatibility_tags.py,sha256=DiNSLqpuruXUamGQwOJ2WZByDGLTGaXi9O-Xf8fOi34,6630
308
+ pip/_internal/utils/datetime.py,sha256=Gt29Ml4ToPSM88j54iu43WKtrU9A-moP4QmMiiqzedU,241
309
+ pip/_internal/utils/deprecation.py,sha256=HVhvyO5qiRFcG88PhZlp_87qdKQNwPTUIIHWtsTR2yI,3696
310
+ pip/_internal/utils/direct_url_helpers.py,sha256=ttKv4GMUqlRwPPog9_CUopy6SDgoxVILzeBJzgfn2tg,3200
311
+ pip/_internal/utils/egg_link.py,sha256=YWfsrbmfcrfWgqQYy6OuIjsyb9IfL1q_2v4zsms1WjI,2459
312
+ pip/_internal/utils/entrypoints.py,sha256=uPjAyShKObdotjQjJUzprQ6r3xQvDIZwUYfHHqZ7Dok,3324
313
+ pip/_internal/utils/filesystem.py,sha256=du4lOOlTOBq22V5kf0yXMydo1KU2Cs-cMtYs3bEk13c,4988
314
+ pip/_internal/utils/filetypes.py,sha256=sEMa38qaqjvx1Zid3OCAUja31BOBU-USuSMPBvU3yjo,689
315
+ pip/_internal/utils/glibc.py,sha256=sEh8RJJLYSdRvTqAO4THVPPA-YSDVLD4SI9So-bxX1U,3726
316
+ pip/_internal/utils/hashes.py,sha256=d32UI1en8nyqZzdZQvxUVdfeBoe4ADWx7HtrIM4-XQ4,4998
317
+ pip/_internal/utils/logging.py,sha256=RtRe7Vp0COC4UBewYdfKicXjCTmHXpDZHdReTzJvB78,12108
318
+ pip/_internal/utils/misc.py,sha256=1jEpqjfqYmQ6K3D4_O8xXSPn8aEfH2uMOlNM7KPvSrg,23374
319
+ pip/_internal/utils/packaging.py,sha256=s5tpUmFumwV0H9JSTzryrIY4JwQM8paGt7Sm7eNwt2Y,1601
320
+ pip/_internal/utils/retry.py,sha256=83wReEB2rcntMZ5VLd7ascaYSjn_kLdlQCqxILxWkPM,1461
321
+ pip/_internal/utils/setuptools_build.py,sha256=0RK4K07qpaBgnYm50_f5d5VdedYPk1fl9QNKaOa60XM,4499
322
+ pip/_internal/utils/subprocess.py,sha256=r4-Ba_Yc3uZXQpi0K4pZFsCT_QqdSvtF3XJ-204QWaA,8983
323
+ pip/_internal/utils/temp_dir.py,sha256=D9c8D7WOProOO8GGDqpBeVSj10NGFmunG0o2TodjjIU,9307
324
+ pip/_internal/utils/unpacking.py,sha256=4tY2D-sbtBt2Lcws98Em3MPAPdHnXSBXnpSU0LoGUZQ,11939
325
+ pip/_internal/utils/urls.py,sha256=aF_eg9ul5d8bMCxfSSSxQcfs-OpJdbStYqZHoy2K1RE,1601
326
+ pip/_internal/utils/virtualenv.py,sha256=mX-UPyw1MPxhwUxKhbqWWX70J6PHXAJjVVrRnG0h9mc,3455
327
+ pip/_internal/utils/wheel.py,sha256=YdRuj6MicG-Q9Mg03FbUv1WTLam6Lc7AgijY4voVyis,4468
328
+ pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
329
+ pip/_internal/vcs/__pycache__/__init__.cpython-314.pyc,,
330
+ pip/_internal/vcs/__pycache__/bazaar.cpython-314.pyc,,
331
+ pip/_internal/vcs/__pycache__/git.cpython-314.pyc,,
332
+ pip/_internal/vcs/__pycache__/mercurial.cpython-314.pyc,,
333
+ pip/_internal/vcs/__pycache__/subversion.cpython-314.pyc,,
334
+ pip/_internal/vcs/__pycache__/versioncontrol.cpython-314.pyc,,
335
+ pip/_internal/vcs/bazaar.py,sha256=3W1eHjkYx2vc6boeb2NBh4I_rlGAXM-vrzfNhLm1Rxg,3734
336
+ pip/_internal/vcs/git.py,sha256=TTeqDuzS-_BFSNuUStVWmE2nGDpKuvUhBBJk_CCQXV0,19144
337
+ pip/_internal/vcs/mercurial.py,sha256=w1ZJWLKqNP1onEjkfjlwBVnMqPZNSIER8ayjQcnTq4w,5575
338
+ pip/_internal/vcs/subversion.py,sha256=uUgdPvxmvEB8Qwtjr0Hc0XgFjbiNi5cbvI4vARLOJXo,11787
339
+ pip/_internal/vcs/versioncontrol.py,sha256=d-v1mcLxofg2FaIqBrV-e-ZcjOgQhS0oxXpki1v1yXs,22502
340
+ pip/_internal/wheel_builder.py,sha256=PDF2w6pxeec5skP3gLIrR_VrJrAO4pHRpUnkNbJ8R5Q,11225
341
+ pip/_vendor/__init__.py,sha256=WzusPTGWIMeQQWSVJ0h2rafGkVTa9WKJ2HT-2-EoZrU,4907
342
+ pip/_vendor/__pycache__/__init__.cpython-314.pyc,,
343
+ pip/_vendor/cachecontrol/__init__.py,sha256=BF2n5OeQz1QW2xSey2LxfNCtwbjnTadXdIH2toqJecg,677
344
+ pip/_vendor/cachecontrol/__pycache__/__init__.cpython-314.pyc,,
345
+ pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-314.pyc,,
346
+ pip/_vendor/cachecontrol/__pycache__/adapter.cpython-314.pyc,,
347
+ pip/_vendor/cachecontrol/__pycache__/cache.cpython-314.pyc,,
348
+ pip/_vendor/cachecontrol/__pycache__/controller.cpython-314.pyc,,
349
+ pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-314.pyc,,
350
+ pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-314.pyc,,
351
+ pip/_vendor/cachecontrol/__pycache__/serialize.cpython-314.pyc,,
352
+ pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-314.pyc,,
353
+ pip/_vendor/cachecontrol/_cmd.py,sha256=iist2EpzJvDVIhMAxXq8iFnTBsiZAd6iplxfmNboNyk,1737
354
+ pip/_vendor/cachecontrol/adapter.py,sha256=8y6rTPXOzVHmDKCW5CR9sivLVuDv-cpdGcZYdRWNaPw,6599
355
+ pip/_vendor/cachecontrol/cache.py,sha256=OXwv7Fn2AwnKNiahJHnjtvaKLndvVLv_-zO-ltlV9qI,1953
356
+ pip/_vendor/cachecontrol/caches/__init__.py,sha256=dtrrroK5BnADR1GWjCZ19aZ0tFsMfvFBtLQQU1sp_ag,303
357
+ pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-314.pyc,,
358
+ pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-314.pyc,,
359
+ pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-314.pyc,,
360
+ pip/_vendor/cachecontrol/caches/file_cache.py,sha256=d8upFmy_zwaCmlbWEVBlLXFddt8Zw8c5SFpxeOZsdfw,4117
361
+ pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=9rmqwtYu_ljVkW6_oLqbC7EaX_a8YT_yLuna-eS0dgo,1386
362
+ pip/_vendor/cachecontrol/controller.py,sha256=cx0Hl8xLZgUuXuy78Gih9AYjCtqurmYjVJxyA4yWt7w,19101
363
+ pip/_vendor/cachecontrol/filewrapper.py,sha256=2ktXNPE0KqnyzF24aOsKCA58HQq1xeC6l2g6_zwjghc,4291
364
+ pip/_vendor/cachecontrol/heuristics.py,sha256=gqMXU8w0gQuEQiSdu3Yg-0vd9kW7nrWKbLca75rheGE,4881
365
+ pip/_vendor/cachecontrol/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
366
+ pip/_vendor/cachecontrol/serialize.py,sha256=HQd2IllQ05HzPkVLMXTF2uX5mjEQjDBkxCqUJUODpZk,5163
367
+ pip/_vendor/cachecontrol/wrapper.py,sha256=hsGc7g8QGQTT-4f8tgz3AM5qwScg6FO0BSdLSRdEvpU,1417
368
+ pip/_vendor/certifi/__init__.py,sha256=dvNDUdAXp-hzoYcf09PXzLmHIlPfypaBQPFp5esDXyo,94
369
+ pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
370
+ pip/_vendor/certifi/__pycache__/__init__.cpython-314.pyc,,
371
+ pip/_vendor/certifi/__pycache__/__main__.cpython-314.pyc,,
372
+ pip/_vendor/certifi/__pycache__/core.cpython-314.pyc,,
373
+ pip/_vendor/certifi/cacert.pem,sha256=lm3cYJxEv9SoAx4Atc3NiT1D92d965vcID6H39f_93o,290057
374
+ pip/_vendor/certifi/core.py,sha256=gu_ECVI1m3Rq0ytpsNE61hgQGcKaOAt9Rs9G8KsTCOI,3442
375
+ pip/_vendor/certifi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
376
+ pip/_vendor/dependency_groups/__init__.py,sha256=C3OFu0NGwDzQ4LOmmSOFPsRSvkbBn-mdd4j_5YqJw-s,250
377
+ pip/_vendor/dependency_groups/__main__.py,sha256=UNTM7P5mfVtT7wDi9kOTXWgV3fu3e8bTrt1Qp1jvjKo,1709
378
+ pip/_vendor/dependency_groups/__pycache__/__init__.cpython-314.pyc,,
379
+ pip/_vendor/dependency_groups/__pycache__/__main__.cpython-314.pyc,,
380
+ pip/_vendor/dependency_groups/__pycache__/_implementation.cpython-314.pyc,,
381
+ pip/_vendor/dependency_groups/__pycache__/_lint_dependency_groups.cpython-314.pyc,,
382
+ pip/_vendor/dependency_groups/__pycache__/_pip_wrapper.cpython-314.pyc,,
383
+ pip/_vendor/dependency_groups/__pycache__/_toml_compat.cpython-314.pyc,,
384
+ pip/_vendor/dependency_groups/_implementation.py,sha256=Gqb2DlQELRakeHlKf6QtQSW0M-bcEomxHw4JsvID1ls,8041
385
+ pip/_vendor/dependency_groups/_lint_dependency_groups.py,sha256=yp-DDqKXtbkDTNa0ifa-FmOA8ra24lPZEXftW-R5AuI,1710
386
+ pip/_vendor/dependency_groups/_pip_wrapper.py,sha256=nuVW_w_ntVxpE26ELEvngMY0N04sFLsijXRyZZROFG8,1865
387
+ pip/_vendor/dependency_groups/_toml_compat.py,sha256=BHnXnFacm3DeolsA35GjI6qkDApvua-1F20kv3BfZWE,285
388
+ pip/_vendor/dependency_groups/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
389
+ pip/_vendor/distlib/__init__.py,sha256=Deo3uo98aUyIfdKJNqofeSEFWwDzrV2QeGLXLsgq0Ag,625
390
+ pip/_vendor/distlib/__pycache__/__init__.cpython-314.pyc,,
391
+ pip/_vendor/distlib/__pycache__/compat.cpython-314.pyc,,
392
+ pip/_vendor/distlib/__pycache__/resources.cpython-314.pyc,,
393
+ pip/_vendor/distlib/__pycache__/scripts.cpython-314.pyc,,
394
+ pip/_vendor/distlib/__pycache__/util.cpython-314.pyc,,
395
+ pip/_vendor/distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467
396
+ pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820
397
+ pip/_vendor/distlib/scripts.py,sha256=Qvp76E9Jc3IgyYubnpqI9fS7eseGOe4FjpeVKqKt9Iw,18612
398
+ pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792
399
+ pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784
400
+ pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032
401
+ pip/_vendor/distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682
402
+ pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648
403
+ pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448
404
+ pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888
405
+ pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981
406
+ pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64
407
+ pip/_vendor/distro/__pycache__/__init__.cpython-314.pyc,,
408
+ pip/_vendor/distro/__pycache__/__main__.cpython-314.pyc,,
409
+ pip/_vendor/distro/__pycache__/distro.cpython-314.pyc,,
410
+ pip/_vendor/distro/distro.py,sha256=XqbefacAhDT4zr_trnbA15eY8vdK4GTghgmvUGrEM_4,49430
411
+ pip/_vendor/distro/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
412
+ pip/_vendor/idna/__init__.py,sha256=MPqNDLZbXqGaNdXxAFhiqFPKEQXju2jNQhCey6-5eJM,868
413
+ pip/_vendor/idna/__pycache__/__init__.cpython-314.pyc,,
414
+ pip/_vendor/idna/__pycache__/codec.cpython-314.pyc,,
415
+ pip/_vendor/idna/__pycache__/compat.cpython-314.pyc,,
416
+ pip/_vendor/idna/__pycache__/core.cpython-314.pyc,,
417
+ pip/_vendor/idna/__pycache__/idnadata.cpython-314.pyc,,
418
+ pip/_vendor/idna/__pycache__/intranges.cpython-314.pyc,,
419
+ pip/_vendor/idna/__pycache__/package_data.cpython-314.pyc,,
420
+ pip/_vendor/idna/__pycache__/uts46data.cpython-314.pyc,,
421
+ pip/_vendor/idna/codec.py,sha256=PEew3ItwzjW4hymbasnty2N2OXvNcgHB-JjrBuxHPYY,3422
422
+ pip/_vendor/idna/compat.py,sha256=RzLy6QQCdl9784aFhb2EX9EKGCJjg0P3PilGdeXXcx8,316
423
+ pip/_vendor/idna/core.py,sha256=YJYyAMnwiQEPjVC4-Fqu_p4CJ6yKKuDGmppBNQNQpFs,13239
424
+ pip/_vendor/idna/idnadata.py,sha256=W30GcIGvtOWYwAjZj4ZjuouUutC6ffgNuyjJy7fZ-lo,78306
425
+ pip/_vendor/idna/intranges.py,sha256=amUtkdhYcQG8Zr-CoMM_kVRacxkivC1WgxN1b63KKdU,1898
426
+ pip/_vendor/idna/package_data.py,sha256=q59S3OXsc5VI8j6vSD0sGBMyk6zZ4vWFREE88yCJYKs,21
427
+ pip/_vendor/idna/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
428
+ pip/_vendor/idna/uts46data.py,sha256=rt90K9J40gUSwppDPCrhjgi5AA6pWM65dEGRSf6rIhM,239289
429
+ pip/_vendor/msgpack/__init__.py,sha256=q2T5PRsITVpeytgS0WiSqok9IY8V_aFiC8VVlXTCTgA,1109
430
+ pip/_vendor/msgpack/__pycache__/__init__.cpython-314.pyc,,
431
+ pip/_vendor/msgpack/__pycache__/exceptions.cpython-314.pyc,,
432
+ pip/_vendor/msgpack/__pycache__/ext.cpython-314.pyc,,
433
+ pip/_vendor/msgpack/__pycache__/fallback.cpython-314.pyc,,
434
+ pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
435
+ pip/_vendor/msgpack/ext.py,sha256=kteJv03n9tYzd5oo3xYopVTo4vRaAxonBQQJhXohZZo,5726
436
+ pip/_vendor/msgpack/fallback.py,sha256=0g1Pzp0vtmBEmJ5w9F3s_-JMVURP8RS4G1cc5TRaAsI,32390
437
+ pip/_vendor/packaging/__init__.py,sha256=_0cDiPVf2S-bNfVmZguxxzmrIYWlyASxpqph4qsJWUc,494
438
+ pip/_vendor/packaging/__pycache__/__init__.cpython-314.pyc,,
439
+ pip/_vendor/packaging/__pycache__/_elffile.cpython-314.pyc,,
440
+ pip/_vendor/packaging/__pycache__/_manylinux.cpython-314.pyc,,
441
+ pip/_vendor/packaging/__pycache__/_musllinux.cpython-314.pyc,,
442
+ pip/_vendor/packaging/__pycache__/_parser.cpython-314.pyc,,
443
+ pip/_vendor/packaging/__pycache__/_structures.cpython-314.pyc,,
444
+ pip/_vendor/packaging/__pycache__/_tokenizer.cpython-314.pyc,,
445
+ pip/_vendor/packaging/__pycache__/markers.cpython-314.pyc,,
446
+ pip/_vendor/packaging/__pycache__/metadata.cpython-314.pyc,,
447
+ pip/_vendor/packaging/__pycache__/requirements.cpython-314.pyc,,
448
+ pip/_vendor/packaging/__pycache__/specifiers.cpython-314.pyc,,
449
+ pip/_vendor/packaging/__pycache__/tags.cpython-314.pyc,,
450
+ pip/_vendor/packaging/__pycache__/utils.cpython-314.pyc,,
451
+ pip/_vendor/packaging/__pycache__/version.cpython-314.pyc,,
452
+ pip/_vendor/packaging/_elffile.py,sha256=UkrbDtW7aeq3qqoAfU16ojyHZ1xsTvGke_WqMTKAKd0,3286
453
+ pip/_vendor/packaging/_manylinux.py,sha256=t4y_-dTOcfr36gLY-ztiOpxxJFGO2ikC11HgfysGxiM,9596
454
+ pip/_vendor/packaging/_musllinux.py,sha256=p9ZqNYiOItGee8KcZFeHF_YcdhVwGHdK6r-8lgixvGQ,2694
455
+ pip/_vendor/packaging/_parser.py,sha256=gYfnj0pRHflVc4RHZit13KNTyN9iiVcU2RUCGi22BwM,10221
456
+ pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
457
+ pip/_vendor/packaging/_tokenizer.py,sha256=OYzt7qKxylOAJ-q0XyK1qAycyPRYLfMPdGQKRXkZWyI,5310
458
+ pip/_vendor/packaging/licenses/__init__.py,sha256=3bx-gryo4sRv5LsrwApouy65VIs3u6irSORJzALkrzU,5727
459
+ pip/_vendor/packaging/licenses/__pycache__/__init__.cpython-314.pyc,,
460
+ pip/_vendor/packaging/licenses/__pycache__/_spdx.cpython-314.pyc,,
461
+ pip/_vendor/packaging/licenses/_spdx.py,sha256=oAm1ztPFwlsmCKe7lAAsv_OIOfS1cWDu9bNBkeu-2ns,48398
462
+ pip/_vendor/packaging/markers.py,sha256=P0we27jm1xUzgGMJxBjtUFCIWeBxTsMeJTOJ6chZmAY,12049
463
+ pip/_vendor/packaging/metadata.py,sha256=8IZErqQQnNm53dZZuYq4FGU4_dpyinMeH1QFBIWIkfE,34739
464
+ pip/_vendor/packaging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
465
+ pip/_vendor/packaging/requirements.py,sha256=gYyRSAdbrIyKDY66ugIDUQjRMvxkH2ALioTmX3tnL6o,2947
466
+ pip/_vendor/packaging/specifiers.py,sha256=yc9D_MycJEmwUpZvcs1OZL9HfiNFmyw0RZaeHRNHkPw,40079
467
+ pip/_vendor/packaging/tags.py,sha256=41s97W9Zatrq2Ed7Rc3qeBDaHe8pKKvYq2mGjwahfXk,22745
468
+ pip/_vendor/packaging/utils.py,sha256=0F3Hh9OFuRgrhTgGZUl5K22Fv1YP2tZl1z_2gO6kJiA,5050
469
+ pip/_vendor/packaging/version.py,sha256=oiHqzTUv_p12hpjgsLDVcaF5hT7pDaSOViUNMD4GTW0,16688
470
+ pip/_vendor/pkg_resources/__init__.py,sha256=vbTJ0_ruUgGxQjlEqsruFmiNPVyh2t9q-zyTDT053xI,124451
471
+ pip/_vendor/pkg_resources/__pycache__/__init__.cpython-314.pyc,,
472
+ pip/_vendor/platformdirs/__init__.py,sha256=UfeSHWl8AeTtbOBOoHAxK4dODOWkZtfy-m_i7cWdJ8c,22344
473
+ pip/_vendor/platformdirs/__main__.py,sha256=jBJ8zb7Mpx5ebcqF83xrpO94MaeCpNGHVf9cvDN2JLg,1505
474
+ pip/_vendor/platformdirs/__pycache__/__init__.cpython-314.pyc,,
475
+ pip/_vendor/platformdirs/__pycache__/__main__.cpython-314.pyc,,
476
+ pip/_vendor/platformdirs/__pycache__/android.cpython-314.pyc,,
477
+ pip/_vendor/platformdirs/__pycache__/api.cpython-314.pyc,,
478
+ pip/_vendor/platformdirs/__pycache__/macos.cpython-314.pyc,,
479
+ pip/_vendor/platformdirs/__pycache__/unix.cpython-314.pyc,,
480
+ pip/_vendor/platformdirs/__pycache__/version.cpython-314.pyc,,
481
+ pip/_vendor/platformdirs/__pycache__/windows.cpython-314.pyc,,
482
+ pip/_vendor/platformdirs/android.py,sha256=r0DshVBf-RO1jXJGX8C4Til7F1XWt-bkdWMgmvEiaYg,9013
483
+ pip/_vendor/platformdirs/api.py,sha256=U9EzI3EYxcXWUCtIGRllqrcN99i2LSY1mq2-GtsUwEQ,9277
484
+ pip/_vendor/platformdirs/macos.py,sha256=UlbyFZ8Rzu3xndCqQEHrfsYTeHwYdFap1Ioz-yxveT4,6154
485
+ pip/_vendor/platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
486
+ pip/_vendor/platformdirs/unix.py,sha256=WZmkUA--L3JNRGmz32s35YfoD3ica6xKIPdCV_HhLcs,10458
487
+ pip/_vendor/platformdirs/version.py,sha256=ddN3EcUPfer7CbqmyFNmg03R3u-qDn32T_fLsx25-Ck,511
488
+ pip/_vendor/platformdirs/windows.py,sha256=IFpiohUBwxPtCzlyKwNtxyW4Jk8haa6W8o59mfrDXVo,10125
489
+ pip/_vendor/pygments/__init__.py,sha256=8uNqJCCwXqbEx5aSsBr0FykUQOBDKBihO5mPqiw1aqo,2983
490
+ pip/_vendor/pygments/__main__.py,sha256=WrndpSe6i1ckX_SQ1KaxD9CTKGzD0EuCOFxcbwFpoLU,353
491
+ pip/_vendor/pygments/__pycache__/__init__.cpython-314.pyc,,
492
+ pip/_vendor/pygments/__pycache__/__main__.cpython-314.pyc,,
493
+ pip/_vendor/pygments/__pycache__/console.cpython-314.pyc,,
494
+ pip/_vendor/pygments/__pycache__/filter.cpython-314.pyc,,
495
+ pip/_vendor/pygments/__pycache__/formatter.cpython-314.pyc,,
496
+ pip/_vendor/pygments/__pycache__/lexer.cpython-314.pyc,,
497
+ pip/_vendor/pygments/__pycache__/modeline.cpython-314.pyc,,
498
+ pip/_vendor/pygments/__pycache__/plugin.cpython-314.pyc,,
499
+ pip/_vendor/pygments/__pycache__/regexopt.cpython-314.pyc,,
500
+ pip/_vendor/pygments/__pycache__/scanner.cpython-314.pyc,,
501
+ pip/_vendor/pygments/__pycache__/sphinxext.cpython-314.pyc,,
502
+ pip/_vendor/pygments/__pycache__/style.cpython-314.pyc,,
503
+ pip/_vendor/pygments/__pycache__/token.cpython-314.pyc,,
504
+ pip/_vendor/pygments/__pycache__/unistring.cpython-314.pyc,,
505
+ pip/_vendor/pygments/__pycache__/util.cpython-314.pyc,,
506
+ pip/_vendor/pygments/console.py,sha256=AagDWqwea2yBWf10KC9ptBgMpMjxKp8yABAmh-NQOVk,1718
507
+ pip/_vendor/pygments/filter.py,sha256=YLtpTnZiu07nY3oK9nfR6E9Y1FBHhP5PX8gvkJWcfag,1910
508
+ pip/_vendor/pygments/filters/__init__.py,sha256=4U4jtA0X3iP83uQnB9-TI-HDSw8E8y8zMYHa0UjbbaI,40392
509
+ pip/_vendor/pygments/filters/__pycache__/__init__.cpython-314.pyc,,
510
+ pip/_vendor/pygments/formatter.py,sha256=KZQMmyo_xkOIkQG8g66LYEkBh1bx7a0HyGCBcvhI9Ew,4390
511
+ pip/_vendor/pygments/formatters/__init__.py,sha256=KTwBmnXlaopJhQDOemVHYHskiDghuq-08YtP6xPNJPg,5385
512
+ pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-314.pyc,,
513
+ pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-314.pyc,,
514
+ pip/_vendor/pygments/formatters/_mapping.py,sha256=1Cw37FuQlNacnxRKmtlPX4nyLoX9_ttko5ZwscNUZZ4,4176
515
+ pip/_vendor/pygments/lexer.py,sha256=_kBrOJ_NT5Tl0IVM0rA9c8eysP6_yrlGzEQI0eVYB-A,35349
516
+ pip/_vendor/pygments/lexers/__init__.py,sha256=wbIME35GH7bI1B9rNPJFqWT-ij_RApZDYPUlZycaLzA,12115
517
+ pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-314.pyc,,
518
+ pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-314.pyc,,
519
+ pip/_vendor/pygments/lexers/__pycache__/python.cpython-314.pyc,,
520
+ pip/_vendor/pygments/lexers/_mapping.py,sha256=l4tCXM8e9aPC2BD6sjIr0deT-J-z5tHgCwL-p1fS0PE,77602
521
+ pip/_vendor/pygments/lexers/python.py,sha256=vxjn1cOHclIKJKxoyiBsQTY65GHbkZtZRuKQ2AVCKaw,53853
522
+ pip/_vendor/pygments/modeline.py,sha256=K5eSkR8GS1r5OkXXTHOcV0aM_6xpk9eWNEIAW-OOJ2g,1005
523
+ pip/_vendor/pygments/plugin.py,sha256=tPx0rJCTIZ9ioRgLNYG4pifCbAwTRUZddvLw-NfAk2w,1891
524
+ pip/_vendor/pygments/regexopt.py,sha256=wXaP9Gjp_hKAdnICqoDkRxAOQJSc4v3X6mcxx3z-TNs,3072
525
+ pip/_vendor/pygments/scanner.py,sha256=nNcETRR1tRuiTaHmHSTTECVYFPcLf6mDZu1e4u91A9E,3092
526
+ pip/_vendor/pygments/sphinxext.py,sha256=5x7Zh9YlU6ISJ31dMwduiaanb5dWZnKg3MyEQsseNnQ,7981
527
+ pip/_vendor/pygments/style.py,sha256=PlOZqlsnTVd58RGy50vkA2cXQ_lP5bF5EGMEBTno6DA,6420
528
+ pip/_vendor/pygments/styles/__init__.py,sha256=x9ebctfyvCAFpMTlMJ5YxwcNYBzjgq6zJaKkNm78r4M,2042
529
+ pip/_vendor/pygments/styles/__pycache__/__init__.cpython-314.pyc,,
530
+ pip/_vendor/pygments/styles/__pycache__/_mapping.cpython-314.pyc,,
531
+ pip/_vendor/pygments/styles/_mapping.py,sha256=6lovFUE29tz6EsV3XYY4hgozJ7q1JL7cfO3UOlgnS8w,3312
532
+ pip/_vendor/pygments/token.py,sha256=WbdWGhYm_Vosb0DDxW9lHNPgITXfWTsQmHt6cy9RbcM,6226
533
+ pip/_vendor/pygments/unistring.py,sha256=al-_rBemRuGvinsrM6atNsHTmJ6DUbw24q2O2Ru1cBc,63208
534
+ pip/_vendor/pygments/util.py,sha256=oRtSpiAo5jM9ulntkvVbgXUdiAW57jnuYGB7t9fYuhc,10031
535
+ pip/_vendor/pyproject_hooks/__init__.py,sha256=cPB_a9LXz5xvsRbX1o2qyAdjLatZJdQ_Lc5McNX-X7Y,691
536
+ pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-314.pyc,,
537
+ pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-314.pyc,,
538
+ pip/_vendor/pyproject_hooks/_impl.py,sha256=jY-raxnmyRyB57ruAitrJRUzEexuAhGTpgMygqx67Z4,14936
539
+ pip/_vendor/pyproject_hooks/_in_process/__init__.py,sha256=MJNPpfIxcO-FghxpBbxkG1rFiQf6HOUbV4U5mq0HFns,557
540
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-314.pyc,,
541
+ pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-314.pyc,,
542
+ pip/_vendor/pyproject_hooks/_in_process/_in_process.py,sha256=qcXMhmx__MIJq10gGHW3mA4Tl8dy8YzHMccwnNoKlw0,12216
543
+ pip/_vendor/pyproject_hooks/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
544
+ pip/_vendor/requests/__init__.py,sha256=HlB_HzhrzGtfD_aaYUwUh1zWXLZ75_YCLyit75d0Vz8,5057
545
+ pip/_vendor/requests/__pycache__/__init__.cpython-314.pyc,,
546
+ pip/_vendor/requests/__pycache__/__version__.cpython-314.pyc,,
547
+ pip/_vendor/requests/__pycache__/_internal_utils.cpython-314.pyc,,
548
+ pip/_vendor/requests/__pycache__/adapters.cpython-314.pyc,,
549
+ pip/_vendor/requests/__pycache__/api.cpython-314.pyc,,
550
+ pip/_vendor/requests/__pycache__/auth.cpython-314.pyc,,
551
+ pip/_vendor/requests/__pycache__/certs.cpython-314.pyc,,
552
+ pip/_vendor/requests/__pycache__/compat.cpython-314.pyc,,
553
+ pip/_vendor/requests/__pycache__/cookies.cpython-314.pyc,,
554
+ pip/_vendor/requests/__pycache__/exceptions.cpython-314.pyc,,
555
+ pip/_vendor/requests/__pycache__/help.cpython-314.pyc,,
556
+ pip/_vendor/requests/__pycache__/hooks.cpython-314.pyc,,
557
+ pip/_vendor/requests/__pycache__/models.cpython-314.pyc,,
558
+ pip/_vendor/requests/__pycache__/packages.cpython-314.pyc,,
559
+ pip/_vendor/requests/__pycache__/sessions.cpython-314.pyc,,
560
+ pip/_vendor/requests/__pycache__/status_codes.cpython-314.pyc,,
561
+ pip/_vendor/requests/__pycache__/structures.cpython-314.pyc,,
562
+ pip/_vendor/requests/__pycache__/utils.cpython-314.pyc,,
563
+ pip/_vendor/requests/__version__.py,sha256=FDq681Y3EvBjdDp5UqplMZ28uTTYlM_Jib0sAV-NpXc,435
564
+ pip/_vendor/requests/_internal_utils.py,sha256=nMQymr4hs32TqVo5AbCrmcJEhvPUh7xXlluyqwslLiQ,1495
565
+ pip/_vendor/requests/adapters.py,sha256=J7VeVxKBvawbtlX2DERVo05J9BXTcWYLMHNd1Baa-bk,27607
566
+ pip/_vendor/requests/api.py,sha256=_Zb9Oa7tzVIizTKwFrPjDEY9ejtm_OnSRERnADxGsQs,6449
567
+ pip/_vendor/requests/auth.py,sha256=kF75tqnLctZ9Mf_hm9TZIj4cQWnN5uxRz8oWsx5wmR0,10186
568
+ pip/_vendor/requests/certs.py,sha256=kHDlkK_beuHXeMPc5jta2wgl8gdKeUWt5f2nTDVrvt8,441
569
+ pip/_vendor/requests/compat.py,sha256=QfbmdTFiZzjSHMXiMrd4joCRU6RabtQ9zIcPoVaHIus,1822
570
+ pip/_vendor/requests/cookies.py,sha256=bNi-iqEj4NPZ00-ob-rHvzkvObzN3lEpgw3g6paS3Xw,18590
571
+ pip/_vendor/requests/exceptions.py,sha256=D1wqzYWne1mS2rU43tP9CeN1G7QAy7eqL9o1god6Ejw,4272
572
+ pip/_vendor/requests/help.py,sha256=hRKaf9u0G7fdwrqMHtF3oG16RKktRf6KiwtSq2Fo1_0,3813
573
+ pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733
574
+ pip/_vendor/requests/models.py,sha256=taljlg6vJ4b-xMu2TaMNFFkaiwMex_VsEQ6qUTN3wzY,35575
575
+ pip/_vendor/requests/packages.py,sha256=_ZQDCJTJ8SP3kVWunSqBsRZNPzj2c1WFVqbdr08pz3U,1057
576
+ pip/_vendor/requests/sessions.py,sha256=ykTI8UWGSltOfH07HKollH7kTBGw4WhiBVaQGmckTw4,30495
577
+ pip/_vendor/requests/status_codes.py,sha256=iJUAeA25baTdw-6PfD0eF4qhpINDJRJI-yaMqxs4LEI,4322
578
+ pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912
579
+ pip/_vendor/requests/utils.py,sha256=WS3wHSQaaEfceu1syiFo5jf4e_CWKUTep_IabOVI_J0,33225
580
+ pip/_vendor/resolvelib/__init__.py,sha256=T0LcAr9Sfai6ZXanpwavdHEea-Anw2QZGx16zd3lMKY,541
581
+ pip/_vendor/resolvelib/__pycache__/__init__.cpython-314.pyc,,
582
+ pip/_vendor/resolvelib/__pycache__/providers.cpython-314.pyc,,
583
+ pip/_vendor/resolvelib/__pycache__/reporters.cpython-314.pyc,,
584
+ pip/_vendor/resolvelib/__pycache__/structs.cpython-314.pyc,,
585
+ pip/_vendor/resolvelib/providers.py,sha256=pIWJbIdJJ9GFtNbtwTH0Ia43Vj6hYCEJj2DOLue15FM,8914
586
+ pip/_vendor/resolvelib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
587
+ pip/_vendor/resolvelib/reporters.py,sha256=pNJf4nFxLpAeKxlBUi2GEj0a2Ij1nikY0UabTKXesT4,2037
588
+ pip/_vendor/resolvelib/resolvers/__init__.py,sha256=728M3EvmnPbVXS7ExXlv2kMu6b7wEsoPutEfl-uVk_I,640
589
+ pip/_vendor/resolvelib/resolvers/__pycache__/__init__.cpython-314.pyc,,
590
+ pip/_vendor/resolvelib/resolvers/__pycache__/abstract.cpython-314.pyc,,
591
+ pip/_vendor/resolvelib/resolvers/__pycache__/criterion.cpython-314.pyc,,
592
+ pip/_vendor/resolvelib/resolvers/__pycache__/exceptions.cpython-314.pyc,,
593
+ pip/_vendor/resolvelib/resolvers/__pycache__/resolution.cpython-314.pyc,,
594
+ pip/_vendor/resolvelib/resolvers/abstract.py,sha256=jZOBVigE4PUub9i3F-bTvBwaIXX8S9EU3CGASBvFqEU,1558
595
+ pip/_vendor/resolvelib/resolvers/criterion.py,sha256=lcmZGv5sKHOnFD_RzZwvlGSj19MeA-5rCMpdf2Sgw7Y,1768
596
+ pip/_vendor/resolvelib/resolvers/exceptions.py,sha256=ln_jaQtgLlRUSFY627yiHG2gD7AgaXzRKaElFVh7fDQ,1768
597
+ pip/_vendor/resolvelib/resolvers/resolution.py,sha256=qU64VKtN-HxoFynmnI6oP8aMPzaiKZtb_1hASH3HTHI,23994
598
+ pip/_vendor/resolvelib/structs.py,sha256=pu-EJiR2IBITr2SQeNPRa0rXhjlStfmO_GEgAhr3004,6420
599
+ pip/_vendor/rich/__init__.py,sha256=dRxjIL-SbFVY0q3IjSMrfgBTHrm1LZDgLOygVBwiYZc,6090
600
+ pip/_vendor/rich/__main__.py,sha256=e_aVC-tDzarWQW9SuZMuCgBr6ODV_iDNV2Wh2xkxOlw,7896
601
+ pip/_vendor/rich/__pycache__/__init__.cpython-314.pyc,,
602
+ pip/_vendor/rich/__pycache__/__main__.cpython-314.pyc,,
603
+ pip/_vendor/rich/__pycache__/_cell_widths.cpython-314.pyc,,
604
+ pip/_vendor/rich/__pycache__/_emoji_codes.cpython-314.pyc,,
605
+ pip/_vendor/rich/__pycache__/_emoji_replace.cpython-314.pyc,,
606
+ pip/_vendor/rich/__pycache__/_export_format.cpython-314.pyc,,
607
+ pip/_vendor/rich/__pycache__/_extension.cpython-314.pyc,,
608
+ pip/_vendor/rich/__pycache__/_fileno.cpython-314.pyc,,
609
+ pip/_vendor/rich/__pycache__/_inspect.cpython-314.pyc,,
610
+ pip/_vendor/rich/__pycache__/_log_render.cpython-314.pyc,,
611
+ pip/_vendor/rich/__pycache__/_loop.cpython-314.pyc,,
612
+ pip/_vendor/rich/__pycache__/_null_file.cpython-314.pyc,,
613
+ pip/_vendor/rich/__pycache__/_palettes.cpython-314.pyc,,
614
+ pip/_vendor/rich/__pycache__/_pick.cpython-314.pyc,,
615
+ pip/_vendor/rich/__pycache__/_ratio.cpython-314.pyc,,
616
+ pip/_vendor/rich/__pycache__/_spinners.cpython-314.pyc,,
617
+ pip/_vendor/rich/__pycache__/_stack.cpython-314.pyc,,
618
+ pip/_vendor/rich/__pycache__/_timer.cpython-314.pyc,,
619
+ pip/_vendor/rich/__pycache__/_win32_console.cpython-314.pyc,,
620
+ pip/_vendor/rich/__pycache__/_windows.cpython-314.pyc,,
621
+ pip/_vendor/rich/__pycache__/_windows_renderer.cpython-314.pyc,,
622
+ pip/_vendor/rich/__pycache__/_wrap.cpython-314.pyc,,
623
+ pip/_vendor/rich/__pycache__/abc.cpython-314.pyc,,
624
+ pip/_vendor/rich/__pycache__/align.cpython-314.pyc,,
625
+ pip/_vendor/rich/__pycache__/ansi.cpython-314.pyc,,
626
+ pip/_vendor/rich/__pycache__/bar.cpython-314.pyc,,
627
+ pip/_vendor/rich/__pycache__/box.cpython-314.pyc,,
628
+ pip/_vendor/rich/__pycache__/cells.cpython-314.pyc,,
629
+ pip/_vendor/rich/__pycache__/color.cpython-314.pyc,,
630
+ pip/_vendor/rich/__pycache__/color_triplet.cpython-314.pyc,,
631
+ pip/_vendor/rich/__pycache__/columns.cpython-314.pyc,,
632
+ pip/_vendor/rich/__pycache__/console.cpython-314.pyc,,
633
+ pip/_vendor/rich/__pycache__/constrain.cpython-314.pyc,,
634
+ pip/_vendor/rich/__pycache__/containers.cpython-314.pyc,,
635
+ pip/_vendor/rich/__pycache__/control.cpython-314.pyc,,
636
+ pip/_vendor/rich/__pycache__/default_styles.cpython-314.pyc,,
637
+ pip/_vendor/rich/__pycache__/diagnose.cpython-314.pyc,,
638
+ pip/_vendor/rich/__pycache__/emoji.cpython-314.pyc,,
639
+ pip/_vendor/rich/__pycache__/errors.cpython-314.pyc,,
640
+ pip/_vendor/rich/__pycache__/file_proxy.cpython-314.pyc,,
641
+ pip/_vendor/rich/__pycache__/filesize.cpython-314.pyc,,
642
+ pip/_vendor/rich/__pycache__/highlighter.cpython-314.pyc,,
643
+ pip/_vendor/rich/__pycache__/json.cpython-314.pyc,,
644
+ pip/_vendor/rich/__pycache__/jupyter.cpython-314.pyc,,
645
+ pip/_vendor/rich/__pycache__/layout.cpython-314.pyc,,
646
+ pip/_vendor/rich/__pycache__/live.cpython-314.pyc,,
647
+ pip/_vendor/rich/__pycache__/live_render.cpython-314.pyc,,
648
+ pip/_vendor/rich/__pycache__/logging.cpython-314.pyc,,
649
+ pip/_vendor/rich/__pycache__/markup.cpython-314.pyc,,
650
+ pip/_vendor/rich/__pycache__/measure.cpython-314.pyc,,
651
+ pip/_vendor/rich/__pycache__/padding.cpython-314.pyc,,
652
+ pip/_vendor/rich/__pycache__/pager.cpython-314.pyc,,
653
+ pip/_vendor/rich/__pycache__/palette.cpython-314.pyc,,
654
+ pip/_vendor/rich/__pycache__/panel.cpython-314.pyc,,
655
+ pip/_vendor/rich/__pycache__/pretty.cpython-314.pyc,,
656
+ pip/_vendor/rich/__pycache__/progress.cpython-314.pyc,,
657
+ pip/_vendor/rich/__pycache__/progress_bar.cpython-314.pyc,,
658
+ pip/_vendor/rich/__pycache__/prompt.cpython-314.pyc,,
659
+ pip/_vendor/rich/__pycache__/protocol.cpython-314.pyc,,
660
+ pip/_vendor/rich/__pycache__/region.cpython-314.pyc,,
661
+ pip/_vendor/rich/__pycache__/repr.cpython-314.pyc,,
662
+ pip/_vendor/rich/__pycache__/rule.cpython-314.pyc,,
663
+ pip/_vendor/rich/__pycache__/scope.cpython-314.pyc,,
664
+ pip/_vendor/rich/__pycache__/screen.cpython-314.pyc,,
665
+ pip/_vendor/rich/__pycache__/segment.cpython-314.pyc,,
666
+ pip/_vendor/rich/__pycache__/spinner.cpython-314.pyc,,
667
+ pip/_vendor/rich/__pycache__/status.cpython-314.pyc,,
668
+ pip/_vendor/rich/__pycache__/style.cpython-314.pyc,,
669
+ pip/_vendor/rich/__pycache__/styled.cpython-314.pyc,,
670
+ pip/_vendor/rich/__pycache__/syntax.cpython-314.pyc,,
671
+ pip/_vendor/rich/__pycache__/table.cpython-314.pyc,,
672
+ pip/_vendor/rich/__pycache__/terminal_theme.cpython-314.pyc,,
673
+ pip/_vendor/rich/__pycache__/text.cpython-314.pyc,,
674
+ pip/_vendor/rich/__pycache__/theme.cpython-314.pyc,,
675
+ pip/_vendor/rich/__pycache__/themes.cpython-314.pyc,,
676
+ pip/_vendor/rich/__pycache__/traceback.cpython-314.pyc,,
677
+ pip/_vendor/rich/__pycache__/tree.cpython-314.pyc,,
678
+ pip/_vendor/rich/_cell_widths.py,sha256=fbmeyetEdHjzE_Vx2l1uK7tnPOhMs2X1lJfO3vsKDpA,10209
679
+ pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
680
+ pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
681
+ pip/_vendor/rich/_export_format.py,sha256=RI08pSrm5tBSzPMvnbTqbD9WIalaOoN5d4M1RTmLq1Y,2128
682
+ pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
683
+ pip/_vendor/rich/_fileno.py,sha256=HWZxP5C2ajMbHryvAQZseflVfQoGzsKOHzKGsLD8ynQ,799
684
+ pip/_vendor/rich/_inspect.py,sha256=ROT0PLC2GMWialWZkqJIjmYq7INRijQQkoSokWTaAiI,9656
685
+ pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
686
+ pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
687
+ pip/_vendor/rich/_null_file.py,sha256=ADGKp1yt-k70FMKV6tnqCqecB-rSJzp-WQsD7LPL-kg,1394
688
+ pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
689
+ pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
690
+ pip/_vendor/rich/_ratio.py,sha256=IOtl78sQCYZsmHyxhe45krkb68u9xVz7zFsXVJD-b2Y,5325
691
+ pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919
692
+ pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
693
+ pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
694
+ pip/_vendor/rich/_win32_console.py,sha256=BSaDRIMwBLITn_m0mTRLPqME5q-quGdSMuYMpYeYJwc,22755
695
+ pip/_vendor/rich/_windows.py,sha256=aBwaD_S56SbgopIvayVmpk0Y28uwY2C5Bab1wl3Bp-I,1925
696
+ pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783
697
+ pip/_vendor/rich/_wrap.py,sha256=FlSsom5EX0LVkA3KWy34yHnCfLtqX-ZIepXKh-70rpc,3404
698
+ pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
699
+ pip/_vendor/rich/align.py,sha256=dg-7uY0ukMLLlUEsBDRLva22_sQgIJD4BK0dmZHFHug,10324
700
+ pip/_vendor/rich/ansi.py,sha256=Avs1LHbSdcyOvDOdpELZUoULcBiYewY76eNBp6uFBhs,6921
701
+ pip/_vendor/rich/bar.py,sha256=ldbVHOzKJOnflVNuv1xS7g6dLX2E3wMnXkdPbpzJTcs,3263
702
+ pip/_vendor/rich/box.py,sha256=kmavBc_dn73L_g_8vxWSwYJD2uzBXOUFTtJOfpbczcM,10686
703
+ pip/_vendor/rich/cells.py,sha256=KrQkj5-LghCCpJLSNQIyAZjndc4bnEqOEmi5YuZ9UCY,5130
704
+ pip/_vendor/rich/color.py,sha256=3HSULVDj7qQkXUdFWv78JOiSZzfy5y1nkcYhna296V0,18211
705
+ pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
706
+ pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
707
+ pip/_vendor/rich/console.py,sha256=t9azZpmRMVU5cphVBZSShNsmBxd2-IAWcTTlhor-E1s,100849
708
+ pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
709
+ pip/_vendor/rich/containers.py,sha256=c_56TxcedGYqDepHBMTuZdUIijitAQgnox-Qde0Z1qo,5502
710
+ pip/_vendor/rich/control.py,sha256=EUTSUFLQbxY6Zmo_sdM-5Ls323vIHTBfN8TPulqeHUY,6487
711
+ pip/_vendor/rich/default_styles.py,sha256=khQFqqaoDs3bprMqWpHw8nO5UpG2DN6QtuTd6LzZwYc,8257
712
+ pip/_vendor/rich/diagnose.py,sha256=fJl1TItRn19gGwouqTg-8zPUW3YqQBqGltrfPQs1H9w,1025
713
+ pip/_vendor/rich/emoji.py,sha256=Wd4bQubZdSy6-PyrRQNuMHtn2VkljK9uPZPVlu2cmx0,2367
714
+ pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
715
+ pip/_vendor/rich/file_proxy.py,sha256=Tl9THMDZ-Pk5Wm8sI1gGg_U5DhusmxD-FZ0fUbcU0W0,1683
716
+ pip/_vendor/rich/filesize.py,sha256=_iz9lIpRgvW7MNSeCZnLg-HwzbP4GETg543WqD8SFs0,2484
717
+ pip/_vendor/rich/highlighter.py,sha256=G_sn-8DKjM1sEjLG_oc4ovkWmiUpWvj8bXi0yed2LnY,9586
718
+ pip/_vendor/rich/json.py,sha256=vVEoKdawoJRjAFayPwXkMBPLy7RSTs-f44wSQDR2nJ0,5031
719
+ pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252
720
+ pip/_vendor/rich/layout.py,sha256=ajkSFAtEVv9EFTcFs-w4uZfft7nEXhNzL7ZVdgrT5rI,14004
721
+ pip/_vendor/rich/live.py,sha256=tF3ukAAJZ_N2ZbGclqZ-iwLoIoZ8f0HHUz79jAyJqj8,15180
722
+ pip/_vendor/rich/live_render.py,sha256=It_39YdzrBm8o3LL0kaGorPFg-BfZWAcrBjLjFokbx4,3521
723
+ pip/_vendor/rich/logging.py,sha256=5KaPPSMP9FxcXPBcKM4cGd_zW78PMgf-YbMVnvfSw0o,12468
724
+ pip/_vendor/rich/markup.py,sha256=3euGKP5s41NCQwaSjTnJxus5iZMHjxpIM0W6fCxra38,8451
725
+ pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305
726
+ pip/_vendor/rich/padding.py,sha256=KVEI3tOwo9sgK1YNSuH__M1_jUWmLZwRVV_KmOtVzyM,4908
727
+ pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828
728
+ pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
729
+ pip/_vendor/rich/panel.py,sha256=9sQl00hPIqH5G2gALQo4NepFwpP0k9wT-s_gOms5pIc,11157
730
+ pip/_vendor/rich/pretty.py,sha256=gy3S72u4FRg2ytoo7N1ZDWDIvB4unbzd5iUGdgm-8fc,36391
731
+ pip/_vendor/rich/progress.py,sha256=CUc2lkU-X59mVdGfjMCBkZeiGPL3uxdONjhNJF2T7wY,60408
732
+ pip/_vendor/rich/progress_bar.py,sha256=mZTPpJUwcfcdgQCTTz3kyY-fc79ddLwtx6Ghhxfo064,8162
733
+ pip/_vendor/rich/prompt.py,sha256=l0RhQU-0UVTV9e08xW1BbIj0Jq2IXyChX4lC0lFNzt4,12447
734
+ pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391
735
+ pip/_vendor/rich/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
736
+ pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
737
+ pip/_vendor/rich/repr.py,sha256=5MZJZmONgC6kud-QW-_m1okXwL2aR6u6y-pUcUCJz28,4431
738
+ pip/_vendor/rich/rule.py,sha256=0fNaS_aERa3UMRc3T5WMpN_sumtDxfaor2y3of1ftBk,4602
739
+ pip/_vendor/rich/scope.py,sha256=TMUU8qo17thyqQCPqjDLYpg_UU1k5qVd-WwiJvnJVas,2843
740
+ pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
741
+ pip/_vendor/rich/segment.py,sha256=otnKeKGEV-WRlQVosfJVeFDcDxAKHpvJ_hLzSu5lumM,24743
742
+ pip/_vendor/rich/spinner.py,sha256=onIhpKlljRHppTZasxO8kXgtYyCHUkpSgKglRJ3o51g,4214
743
+ pip/_vendor/rich/status.py,sha256=kkPph3YeAZBo-X-4wPp8gTqZyU466NLwZBA4PZTTewo,4424
744
+ pip/_vendor/rich/style.py,sha256=xpj4uMBZMtuNuNomfUiamigl3p1sDvTCZwrG1tcTVeg,27059
745
+ pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
746
+ pip/_vendor/rich/syntax.py,sha256=eDKIRwl--eZ0Lwo2da2RRtfutXGavrJO61Cl5OkS59U,36371
747
+ pip/_vendor/rich/table.py,sha256=ZmT7V7MMCOYKw7TGY9SZLyYDf6JdM-WVf07FdVuVhTI,40049
748
+ pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370
749
+ pip/_vendor/rich/text.py,sha256=AO7JPCz6-gaN1thVLXMBntEmDPVYFgFNG1oM61_sanU,47552
750
+ pip/_vendor/rich/theme.py,sha256=oNyhXhGagtDlbDye3tVu3esWOWk0vNkuxFw-_unlaK0,3771
751
+ pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
752
+ pip/_vendor/rich/traceback.py,sha256=c0WmB_L04_UfZbLaoH982_U_s7eosxKMUiAVmDPdRYU,35861
753
+ pip/_vendor/rich/tree.py,sha256=yWnQ6rAvRGJ3qZGqBrxS2SW2TKBTNrP0SdY8QxOFPuw,9451
754
+ pip/_vendor/tomli/__init__.py,sha256=PhNw_eyLgdn7McJ6nrAN8yIm3dXC75vr1sVGVVwDSpA,314
755
+ pip/_vendor/tomli/__pycache__/__init__.cpython-314.pyc,,
756
+ pip/_vendor/tomli/__pycache__/_parser.cpython-314.pyc,,
757
+ pip/_vendor/tomli/__pycache__/_re.cpython-314.pyc,,
758
+ pip/_vendor/tomli/__pycache__/_types.cpython-314.pyc,,
759
+ pip/_vendor/tomli/_parser.py,sha256=9w8LG0jB7fwmZZWB0vVXbeejDHcl4ANIJxB2scEnDlA,25591
760
+ pip/_vendor/tomli/_re.py,sha256=sh4sBDRgO94KJZwNIrgdcyV_qQast50YvzOAUGpRDKA,3171
761
+ pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
762
+ pip/_vendor/tomli/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
763
+ pip/_vendor/tomli_w/__init__.py,sha256=0F8yDtXx3Uunhm874KrAcP76srsM98y7WyHQwCulZbo,169
764
+ pip/_vendor/tomli_w/__pycache__/__init__.cpython-314.pyc,,
765
+ pip/_vendor/tomli_w/__pycache__/_writer.cpython-314.pyc,,
766
+ pip/_vendor/tomli_w/_writer.py,sha256=dsifFS2xYf1i76mmRyfz9y125xC7Z_HQ845ZKhJsYXs,6961
767
+ pip/_vendor/tomli_w/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
768
+ pip/_vendor/truststore/__init__.py,sha256=2wRSVijjRzPLVXUzWqvdZLNsEOhDfopKLd2EKAYLwKU,1320
769
+ pip/_vendor/truststore/__pycache__/__init__.cpython-314.pyc,,
770
+ pip/_vendor/truststore/__pycache__/_api.cpython-314.pyc,,
771
+ pip/_vendor/truststore/__pycache__/_macos.cpython-314.pyc,,
772
+ pip/_vendor/truststore/__pycache__/_openssl.cpython-314.pyc,,
773
+ pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-314.pyc,,
774
+ pip/_vendor/truststore/__pycache__/_windows.cpython-314.pyc,,
775
+ pip/_vendor/truststore/_api.py,sha256=af8gEZG_vhsudia9vz4es3Vh8xAqhzQz4Cbjs6_rxus,11234
776
+ pip/_vendor/truststore/_macos.py,sha256=nZlLkOmszUE0g6ryRwBVGY5COzPyudcsiJtDWarM5LQ,20503
777
+ pip/_vendor/truststore/_openssl.py,sha256=LLUZ7ZGaio-i5dpKKjKCSeSufmn6T8pi9lDcFnvSyq0,2324
778
+ pip/_vendor/truststore/_ssl_constants.py,sha256=NUD4fVKdSD02ri7-db0tnO0VqLP9aHuzmStcW7tAl08,1130
779
+ pip/_vendor/truststore/_windows.py,sha256=rAHyKYD8M7t-bXfG8VgOVa3TpfhVhbt4rZQlO45YuP8,17993
780
+ pip/_vendor/truststore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
781
+ pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
782
+ pip/_vendor/urllib3/__pycache__/__init__.cpython-314.pyc,,
783
+ pip/_vendor/urllib3/__pycache__/_collections.cpython-314.pyc,,
784
+ pip/_vendor/urllib3/__pycache__/_version.cpython-314.pyc,,
785
+ pip/_vendor/urllib3/__pycache__/connection.cpython-314.pyc,,
786
+ pip/_vendor/urllib3/__pycache__/connectionpool.cpython-314.pyc,,
787
+ pip/_vendor/urllib3/__pycache__/exceptions.cpython-314.pyc,,
788
+ pip/_vendor/urllib3/__pycache__/fields.cpython-314.pyc,,
789
+ pip/_vendor/urllib3/__pycache__/filepost.cpython-314.pyc,,
790
+ pip/_vendor/urllib3/__pycache__/poolmanager.cpython-314.pyc,,
791
+ pip/_vendor/urllib3/__pycache__/request.cpython-314.pyc,,
792
+ pip/_vendor/urllib3/__pycache__/response.cpython-314.pyc,,
793
+ pip/_vendor/urllib3/_collections.py,sha256=pyASJJhW7wdOpqJj9QJA8FyGRfr8E8uUUhqUvhF0728,11372
794
+ pip/_vendor/urllib3/_version.py,sha256=t9wGB6ooOTXXgiY66K1m6BZS1CJyXHAU8EoWDTe6Shk,64
795
+ pip/_vendor/urllib3/connection.py,sha256=ttIA909BrbTUzwkqEe_TzZVh4JOOj7g61Ysei2mrwGg,20314
796
+ pip/_vendor/urllib3/connectionpool.py,sha256=e2eiAwNbFNCKxj4bwDKNK-w7HIdSz3OmMxU_TIt-evQ,40408
797
+ pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
798
+ pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-314.pyc,,
799
+ pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-314.pyc,,
800
+ pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-314.pyc,,
801
+ pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-314.pyc,,
802
+ pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-314.pyc,,
803
+ pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-314.pyc,,
804
+ pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-314.pyc,,
805
+ pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
806
+ pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
807
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-314.pyc,,
808
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-314.pyc,,
809
+ pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-314.pyc,,
810
+ pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
811
+ pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
812
+ pip/_vendor/urllib3/contrib/appengine.py,sha256=VR68eAVE137lxTgjBDwCna5UiBZTOKa01Aj_-5BaCz4,11036
813
+ pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=NlfkW7WMdW8ziqudopjHoW299og1BTWi0IeIibquFwk,4528
814
+ pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=hDJh4MhyY_p-oKlFcYcQaVQRDv6GMmBGuW9yjxyeejM,17081
815
+ pip/_vendor/urllib3/contrib/securetransport.py,sha256=Fef1IIUUFHqpevzXiDPbIGkDKchY2FVKeVeLGR1Qq3g,34446
816
+ pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
817
+ pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
818
+ pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
819
+ pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
820
+ pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
821
+ pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-314.pyc,,
822
+ pip/_vendor/urllib3/packages/__pycache__/six.cpython-314.pyc,,
823
+ pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
824
+ pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-314.pyc,,
825
+ pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-314.pyc,,
826
+ pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-314.pyc,,
827
+ pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
828
+ pip/_vendor/urllib3/packages/backports/weakref_finalize.py,sha256=tRCal5OAhNSRyb0DhHp-38AtIlCsRP8BxF3NX-6rqIA,5343
829
+ pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
830
+ pip/_vendor/urllib3/poolmanager.py,sha256=aWyhXRtNO4JUnCSVVqKTKQd8EXTvUm1VN9pgs2bcONo,19990
831
+ pip/_vendor/urllib3/request.py,sha256=YTWFNr7QIwh7E1W9dde9LM77v2VWTJ5V78XuTTw7D1A,6691
832
+ pip/_vendor/urllib3/response.py,sha256=fmDJAFkG71uFTn-sVSTh2Iw0WmcXQYqkbRjihvwBjU8,30641
833
+ pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
834
+ pip/_vendor/urllib3/util/__pycache__/__init__.cpython-314.pyc,,
835
+ pip/_vendor/urllib3/util/__pycache__/connection.cpython-314.pyc,,
836
+ pip/_vendor/urllib3/util/__pycache__/proxy.cpython-314.pyc,,
837
+ pip/_vendor/urllib3/util/__pycache__/queue.cpython-314.pyc,,
838
+ pip/_vendor/urllib3/util/__pycache__/request.cpython-314.pyc,,
839
+ pip/_vendor/urllib3/util/__pycache__/response.cpython-314.pyc,,
840
+ pip/_vendor/urllib3/util/__pycache__/retry.cpython-314.pyc,,
841
+ pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-314.pyc,,
842
+ pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-314.pyc,,
843
+ pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-314.pyc,,
844
+ pip/_vendor/urllib3/util/__pycache__/timeout.cpython-314.pyc,,
845
+ pip/_vendor/urllib3/util/__pycache__/url.cpython-314.pyc,,
846
+ pip/_vendor/urllib3/util/__pycache__/wait.cpython-314.pyc,,
847
+ pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
848
+ pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
849
+ pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
850
+ pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997
851
+ pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
852
+ pip/_vendor/urllib3/util/retry.py,sha256=6ENvOZ8PBDzh8kgixpql9lIrb2dxH-k7ZmBanJF2Ng4,22050
853
+ pip/_vendor/urllib3/util/ssl_.py,sha256=QDuuTxPSCj1rYtZ4xpD7Ux-r20TD50aHyqKyhQ7Bq4A,17460
854
+ pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
855
+ pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
856
+ pip/_vendor/urllib3/util/timeout.py,sha256=cwq4dMk87mJHSBktK1miYJ-85G-3T3RmT20v7SFCpno,10168
857
+ pip/_vendor/urllib3/util/url.py,sha256=lCAE7M5myA8EDdW0sJuyyZhVB9K_j38ljWhHAnFaWoE,14296
858
+ pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
859
+ pip/_vendor/vendor.txt,sha256=fawq8T1XFfBhs4rjjSl4fUA3Px9P2mtG2evqqPyhbhc,343
860
+ pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286
.venv/Lib/site-packages/pip-25.2.dist-info/REQUESTED ADDED
File without changes
.venv/Lib/site-packages/pip-25.2.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
.venv/Lib/site-packages/pip-25.2.dist-info/entry_points.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [console_scripts]
2
+ pip = pip._internal.cli.main:main
3
+ pip3 = pip._internal.cli.main:main
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/AUTHORS.txt ADDED
@@ -0,0 +1,833 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @Switch01
2
+ A_Rog
3
+ Aakanksha Agrawal
4
+ Abhinav Sagar
5
+ ABHYUDAY PRATAP SINGH
6
+ abs51295
7
+ AceGentile
8
+ Adam Chainz
9
+ Adam Tse
10
+ Adam Turner
11
+ Adam Wentz
12
+ admin
13
+ Adolfo Ochagavía
14
+ Adrien Morison
15
+ Agus
16
+ ahayrapetyan
17
+ Ahilya
18
+ AinsworthK
19
+ Akash Srivastava
20
+ Alan Yee
21
+ Albert Tugushev
22
+ Albert-Guan
23
+ albertg
24
+ Alberto Sottile
25
+ Aleks Bunin
26
+ Ales Erjavec
27
+ Alethea Flowers
28
+ Alex Gaynor
29
+ Alex Grönholm
30
+ Alex Hedges
31
+ Alex Loosley
32
+ Alex Morega
33
+ Alex Stachowiak
34
+ Alexander Regueiro
35
+ Alexander Shtyrov
36
+ Alexandre Conrad
37
+ Alexey Popravka
38
+ Aleš Erjavec
39
+ Alli
40
+ Ami Fischman
41
+ Ananya Maiti
42
+ Anatoly Techtonik
43
+ Anders Kaseorg
44
+ Andre Aguiar
45
+ Andreas Lutro
46
+ Andrei Geacar
47
+ Andrew Gaul
48
+ Andrew Shymanel
49
+ Andrey Bienkowski
50
+ Andrey Bulgakov
51
+ Andrés Delfino
52
+ Andy Freeland
53
+ Andy Kluger
54
+ Ani Hayrapetyan
55
+ Aniruddha Basak
56
+ Anish Tambe
57
+ Anrs Hu
58
+ Anthony Sottile
59
+ Antoine Musso
60
+ Anton Ovchinnikov
61
+ Anton Patrushev
62
+ Anton Zelenov
63
+ Antonio Alvarado Hernandez
64
+ Antony Lee
65
+ Antti Kaihola
66
+ Anubhav Patel
67
+ Anudit Nagar
68
+ Anuj Godase
69
+ AQNOUCH Mohammed
70
+ AraHaan
71
+ arena
72
+ arenasys
73
+ Arindam Choudhury
74
+ Armin Ronacher
75
+ Arnon Yaari
76
+ Artem
77
+ Arun Babu Neelicattu
78
+ Ashley Manton
79
+ Ashwin Ramaswami
80
+ atse
81
+ Atsushi Odagiri
82
+ Avinash Karhana
83
+ Avner Cohen
84
+ Awit (Ah-Wit) Ghirmai
85
+ Baptiste Mispelon
86
+ Barney Gale
87
+ barneygale
88
+ Bartek Ogryczak
89
+ Bastian Venthur
90
+ Ben Bodenmiller
91
+ Ben Darnell
92
+ Ben Hoyt
93
+ Ben Mares
94
+ Ben Rosser
95
+ Bence Nagy
96
+ Benjamin Peterson
97
+ Benjamin VanEvery
98
+ Benoit Pierre
99
+ Berker Peksag
100
+ Bernard
101
+ Bernard Tyers
102
+ Bernardo B. Marques
103
+ Bernhard M. Wiedemann
104
+ Bertil Hatt
105
+ Bhavam Vidyarthi
106
+ Blazej Michalik
107
+ Bogdan Opanchuk
108
+ BorisZZZ
109
+ Brad Erickson
110
+ Bradley Ayers
111
+ Bradley Reynolds
112
+ Branch Vincent
113
+ Brandon L. Reiss
114
+ Brandt Bucher
115
+ Brannon Dorsey
116
+ Brett Randall
117
+ Brett Rosen
118
+ Brian Cristante
119
+ Brian Rosner
120
+ briantracy
121
+ BrownTruck
122
+ Bruno Oliveira
123
+ Bruno Renié
124
+ Bruno S
125
+ Bstrdsmkr
126
+ Buck Golemon
127
+ burrows
128
+ Bussonnier Matthias
129
+ bwoodsend
130
+ c22
131
+ Caleb Brown
132
+ Caleb Martinez
133
+ Calvin Smith
134
+ Carl Meyer
135
+ Carlos Liam
136
+ Carol Willing
137
+ Carter Thayer
138
+ Cass
139
+ Chandrasekhar Atina
140
+ Charlie Marsh
141
+ charwick
142
+ Chih-Hsuan Yen
143
+ Chris Brinker
144
+ Chris Hunt
145
+ Chris Jerdonek
146
+ Chris Kuehl
147
+ Chris Markiewicz
148
+ Chris McDonough
149
+ Chris Pawley
150
+ Chris Pryer
151
+ Chris Wolfe
152
+ Christian Clauss
153
+ Christian Heimes
154
+ Christian Oudard
155
+ Christoph Reiter
156
+ Christopher Hunt
157
+ Christopher Snyder
158
+ chrysle
159
+ cjc7373
160
+ Clark Boylan
161
+ Claudio Jolowicz
162
+ Clay McClure
163
+ Cody
164
+ Cody Soyland
165
+ Colin Watson
166
+ Collin Anderson
167
+ Connor Osborn
168
+ Cooper Lees
169
+ Cooper Ry Lees
170
+ Cory Benfield
171
+ Cory Wright
172
+ Craig Kerstiens
173
+ Cristian Sorinel
174
+ Cristina
175
+ Cristina Muñoz
176
+ ctg123
177
+ Curtis Doty
178
+ cytolentino
179
+ Daan De Meyer
180
+ Dale
181
+ Damian
182
+ Damian Quiroga
183
+ Damian Shaw
184
+ Dan Black
185
+ Dan Savilonis
186
+ Dan Sully
187
+ Dane Hillard
188
+ daniel
189
+ Daniel Collins
190
+ Daniel Hahler
191
+ Daniel Holth
192
+ Daniel Jost
193
+ Daniel Katz
194
+ Daniel Shaulov
195
+ Daniele Esposti
196
+ Daniele Nicolodi
197
+ Daniele Procida
198
+ Daniil Konovalenko
199
+ Danny Hermes
200
+ Danny McClanahan
201
+ Darren Kavanagh
202
+ Dav Clark
203
+ Dave Abrahams
204
+ Dave Jones
205
+ David Aguilar
206
+ David Black
207
+ David Bordeynik
208
+ David Caro
209
+ David D Lowe
210
+ David Evans
211
+ David Hewitt
212
+ David Linke
213
+ David Poggi
214
+ David Poznik
215
+ David Pursehouse
216
+ David Runge
217
+ David Tucker
218
+ David Wales
219
+ Davidovich
220
+ ddelange
221
+ Deepak Sharma
222
+ Deepyaman Datta
223
+ Denis Roussel (ACSONE)
224
+ Denise Yu
225
+ dependabot[bot]
226
+ derwolfe
227
+ Desetude
228
+ developer
229
+ Devesh Kumar
230
+ Devesh Kumar Singh
231
+ devsagul
232
+ Diego Caraballo
233
+ Diego Ramirez
234
+ DiegoCaraballo
235
+ Dimitri Merejkowsky
236
+ Dimitri Papadopoulos
237
+ Dimitri Papadopoulos Orfanos
238
+ Dirk Stolle
239
+ Dmitry Gladkov
240
+ Dmitry Volodin
241
+ Domen Kožar
242
+ Dominic Davis-Foster
243
+ Donald Stufft
244
+ Dongweiming
245
+ doron zarhi
246
+ Dos Moonen
247
+ Douglas Thor
248
+ DrFeathers
249
+ Dustin Ingram
250
+ Dustin Rodrigues
251
+ Dwayne Bailey
252
+ Ed Morley
253
+ Edgar Ramírez
254
+ Edgar Ramírez Mondragón
255
+ Ee Durbin
256
+ Efflam Lemaillet
257
+ efflamlemaillet
258
+ Eitan Adler
259
+ ekristina
260
+ elainechan
261
+ Eli Schwartz
262
+ Elisha Hollander
263
+ Ellen Marie Dash
264
+ Emil Burzo
265
+ Emil Styrke
266
+ Emmanuel Arias
267
+ Endoh Takanao
268
+ enoch
269
+ Erdinc Mutlu
270
+ Eric Cousineau
271
+ Eric Gillingham
272
+ Eric Hanchrow
273
+ Eric Hopper
274
+ Erik M. Bray
275
+ Erik Rose
276
+ Erwin Janssen
277
+ Eugene Vereshchagin
278
+ everdimension
279
+ Federico
280
+ Felipe Peter
281
+ Felix Yan
282
+ fiber-space
283
+ Filip Kokosiński
284
+ Filipe Laíns
285
+ Finn Womack
286
+ finnagin
287
+ Flavio Amurrio
288
+ Florian Briand
289
+ Florian Rathgeber
290
+ Francesco
291
+ Francesco Montesano
292
+ Fredrik Orderud
293
+ Fredrik Roubert
294
+ Frost Ming
295
+ Gabriel Curio
296
+ Gabriel de Perthuis
297
+ Garry Polley
298
+ gavin
299
+ gdanielson
300
+ Gene Wood
301
+ Geoffrey Sneddon
302
+ George Margaritis
303
+ George Song
304
+ Georgi Valkov
305
+ Georgy Pchelkin
306
+ ghost
307
+ Giftlin Rajaiah
308
+ gizmoguy1
309
+ gkdoc
310
+ Godefroid Chapelle
311
+ Gopinath M
312
+ GOTO Hayato
313
+ gousaiyang
314
+ gpiks
315
+ Greg Roodt
316
+ Greg Ward
317
+ Guilherme Espada
318
+ Guillaume Seguin
319
+ gutsytechster
320
+ Guy Rozendorn
321
+ Guy Tuval
322
+ gzpan123
323
+ Hanjun Kim
324
+ Hari Charan
325
+ Harsh Vardhan
326
+ harupy
327
+ Harutaka Kawamura
328
+ hauntsaninja
329
+ Henrich Hartzer
330
+ Henry Schreiner
331
+ Herbert Pfennig
332
+ Holly Stotelmyer
333
+ Honnix
334
+ Hsiaoming Yang
335
+ Hugo Lopes Tavares
336
+ Hugo van Kemenade
337
+ Hugues Bruant
338
+ Hynek Schlawack
339
+ iamsrp-deshaw
340
+ Ian Bicking
341
+ Ian Cordasco
342
+ Ian Lee
343
+ Ian Stapleton Cordasco
344
+ Ian Wienand
345
+ Igor Kuzmitshov
346
+ Igor Sobreira
347
+ Ikko Ashimine
348
+ Ilan Schnell
349
+ Illia Volochii
350
+ Ilya Baryshev
351
+ Inada Naoki
352
+ Ionel Cristian Mărieș
353
+ Ionel Maries Cristian
354
+ Itamar Turner-Trauring
355
+ iTrooz
356
+ Ivan Pozdeev
357
+ J. Nick Koston
358
+ Jacob Kim
359
+ Jacob Walls
360
+ Jaime Sanz
361
+ Jake Lishman
362
+ jakirkham
363
+ Jakub Kuczys
364
+ Jakub Stasiak
365
+ Jakub Vysoky
366
+ Jakub Wilk
367
+ James Cleveland
368
+ James Curtin
369
+ James Firth
370
+ James Gerity
371
+ James Polley
372
+ Jan Pokorný
373
+ Jannis Leidel
374
+ Jarek Potiuk
375
+ jarondl
376
+ Jason Curtis
377
+ Jason R. Coombs
378
+ JasonMo
379
+ JasonMo1
380
+ Jay Graves
381
+ Jean Abou Samra
382
+ Jean-Christophe Fillion-Robin
383
+ Jeff Barber
384
+ Jeff Dairiki
385
+ Jeff Widman
386
+ Jelmer Vernooij
387
+ jenix21
388
+ Jeremy Fleischman
389
+ Jeremy Stanley
390
+ Jeremy Zafran
391
+ Jesse Rittner
392
+ Jiashuo Li
393
+ Jim Fisher
394
+ Jim Garrison
395
+ Jinzhe Zeng
396
+ Jiun Bae
397
+ Jivan Amara
398
+ Joa
399
+ Joe Bylund
400
+ Joe Michelini
401
+ Johannes Altmanninger
402
+ John Paton
403
+ John Sirois
404
+ John T. Wodder II
405
+ John-Scott Atlakson
406
+ johnthagen
407
+ Jon Banafato
408
+ Jon Dufresne
409
+ Jon Parise
410
+ Jonas Nockert
411
+ Jonathan Herbert
412
+ Joonatan Partanen
413
+ Joost Molenaar
414
+ Jorge Niedbalski
415
+ Joseph Bylund
416
+ Joseph Long
417
+ Josh Bronson
418
+ Josh Cannon
419
+ Josh Hansen
420
+ Josh Schneier
421
+ Joshua
422
+ JoshuaPerdue
423
+ Juan Luis Cano Rodríguez
424
+ Juanjo Bazán
425
+ Judah Rand
426
+ Julian Berman
427
+ Julian Gethmann
428
+ Julien Demoor
429
+ July Tikhonov
430
+ Jussi Kukkonen
431
+ Justin van Heek
432
+ jwg4
433
+ Jyrki Pulliainen
434
+ Kai Chen
435
+ Kai Mueller
436
+ Kamal Bin Mustafa
437
+ Karolina Surma
438
+ kasium
439
+ kaustav haldar
440
+ keanemind
441
+ Keith Maxwell
442
+ Kelsey Hightower
443
+ Kenneth Belitzky
444
+ Kenneth Reitz
445
+ Kevin Burke
446
+ Kevin Carter
447
+ Kevin Frommelt
448
+ Kevin R Patterson
449
+ Kexuan Sun
450
+ Kit Randel
451
+ Klaas van Schelven
452
+ KOLANICH
453
+ konstin
454
+ kpinc
455
+ Krishan Bhasin
456
+ Krishna Oza
457
+ Kumar McMillan
458
+ Kuntal Majumder
459
+ Kurt McKee
460
+ Kyle Persohn
461
+ lakshmanaram
462
+ Laszlo Kiss-Kollar
463
+ Laurent Bristiel
464
+ Laurent LAPORTE
465
+ Laurie O
466
+ Laurie Opperman
467
+ layday
468
+ Leon Sasson
469
+ Lev Givon
470
+ Lincoln de Sousa
471
+ Lipis
472
+ lorddavidiii
473
+ Loren Carvalho
474
+ Lucas Cimon
475
+ Ludovic Gasc
476
+ Luis Medel
477
+ Lukas Geiger
478
+ Lukas Juhrich
479
+ Luke Macken
480
+ Luo Jiebin
481
+ luojiebin
482
+ luz.paz
483
+ László Kiss Kollár
484
+ M00nL1ght
485
+ Malcolm Smith
486
+ Marc Abramowitz
487
+ Marc Tamlyn
488
+ Marcus Smith
489
+ Mariatta
490
+ Mark Kohler
491
+ Mark McLoughlin
492
+ Mark Williams
493
+ Markus Hametner
494
+ Martey Dodoo
495
+ Martin Fischer
496
+ Martin Häcker
497
+ Martin Pavlasek
498
+ Masaki
499
+ Masklinn
500
+ Matej Stuchlik
501
+ Mathew Jennings
502
+ Mathieu Bridon
503
+ Mathieu Kniewallner
504
+ Matt Bacchi
505
+ Matt Good
506
+ Matt Maker
507
+ Matt Robenolt
508
+ Matt Wozniski
509
+ matthew
510
+ Matthew Einhorn
511
+ Matthew Feickert
512
+ Matthew Gilliard
513
+ Matthew Hughes
514
+ Matthew Iversen
515
+ Matthew Treinish
516
+ Matthew Trumbell
517
+ Matthew Willson
518
+ Matthias Bussonnier
519
+ mattip
520
+ Maurits van Rees
521
+ Max W Chase
522
+ Maxim Kurnikov
523
+ Maxime Rouyrre
524
+ mayeut
525
+ mbaluna
526
+ Md Sujauddin Sekh
527
+ mdebi
528
+ memoselyk
529
+ meowmeowcat
530
+ Michael
531
+ Michael Aquilina
532
+ Michael E. Karpeles
533
+ Michael Klich
534
+ Michael Mintz
535
+ Michael Williamson
536
+ michaelpacer
537
+ Michał Górny
538
+ Mickaël Schoentgen
539
+ Miguel Araujo Perez
540
+ Mihir Singh
541
+ Mike
542
+ Mike Hendricks
543
+ Min RK
544
+ MinRK
545
+ Miro Hrončok
546
+ Monica Baluna
547
+ montefra
548
+ Monty Taylor
549
+ morotti
550
+ mrKazzila
551
+ Muha Ajjan
552
+ Nadav Wexler
553
+ Nahuel Ambrosini
554
+ Nate Coraor
555
+ Nate Prewitt
556
+ Nathan Houghton
557
+ Nathaniel J. Smith
558
+ Nehal J Wani
559
+ Neil Botelho
560
+ Nguyễn Gia Phong
561
+ Nicholas Serra
562
+ Nick Coghlan
563
+ Nick Stenning
564
+ Nick Timkovich
565
+ Nicolas Bock
566
+ Nicole Harris
567
+ Nikhil Benesch
568
+ Nikhil Ladha
569
+ Nikita Chepanov
570
+ Nikolay Korolev
571
+ Nipunn Koorapati
572
+ Nitesh Sharma
573
+ Niyas Sait
574
+ Noah
575
+ Noah Gorny
576
+ Nowell Strite
577
+ NtaleGrey
578
+ nucccc
579
+ nvdv
580
+ OBITORASU
581
+ Ofek Lev
582
+ ofrinevo
583
+ Oleg Burnaev
584
+ Oliver Freund
585
+ Oliver Jeeves
586
+ Oliver Mannion
587
+ Oliver Tonnhofer
588
+ Olivier Girardot
589
+ Olivier Grisel
590
+ Ollie Rutherfurd
591
+ OMOTO Kenji
592
+ Omry Yadan
593
+ onlinejudge95
594
+ Oren Held
595
+ Oscar Benjamin
596
+ Oz N Tiram
597
+ Pachwenko
598
+ Patrick Dubroy
599
+ Patrick Jenkins
600
+ Patrick Lawson
601
+ patricktokeeffe
602
+ Patrik Kopkan
603
+ Paul Ganssle
604
+ Paul Kehrer
605
+ Paul Moore
606
+ Paul Nasrat
607
+ Paul Oswald
608
+ Paul van der Linden
609
+ Paulus Schoutsen
610
+ Pavel Safronov
611
+ Pavithra Eswaramoorthy
612
+ Pawel Jasinski
613
+ Paweł Szramowski
614
+ Pekka Klärck
615
+ Peter Gessler
616
+ Peter Lisák
617
+ Peter Shen
618
+ Peter Waller
619
+ Petr Viktorin
620
+ petr-tik
621
+ Phaneendra Chiruvella
622
+ Phil Elson
623
+ Phil Freo
624
+ Phil Pennock
625
+ Phil Whelan
626
+ Philip Jägenstedt
627
+ Philip Molloy
628
+ Philippe Ombredanne
629
+ Pi Delport
630
+ Pierre-Yves Rofes
631
+ Pieter Degroote
632
+ pip
633
+ Prabakaran Kumaresshan
634
+ Prabhjyotsing Surjit Singh Sodhi
635
+ Prabhu Marappan
636
+ Pradyun Gedam
637
+ Prashant Sharma
638
+ Pratik Mallya
639
+ pre-commit-ci[bot]
640
+ Preet Thakkar
641
+ Preston Holmes
642
+ Przemek Wrzos
643
+ Pulkit Goyal
644
+ q0w
645
+ Qiangning Hong
646
+ Qiming Xu
647
+ qraqras
648
+ Quentin Lee
649
+ Quentin Pradet
650
+ R. David Murray
651
+ Rafael Caricio
652
+ Ralf Schmitt
653
+ Ran Benita
654
+ Randy Döring
655
+ Razzi Abuissa
656
+ rdb
657
+ Reece Dunham
658
+ Remi Rampin
659
+ Rene Dudfield
660
+ Riccardo Magliocchetti
661
+ Riccardo Schirone
662
+ Richard Jones
663
+ Richard Si
664
+ Ricky Ng-Adam
665
+ Rishi
666
+ rmorotti
667
+ RobberPhex
668
+ Robert Collins
669
+ Robert McGibbon
670
+ Robert Pollak
671
+ Robert T. McGibbon
672
+ robin elisha robinson
673
+ Rodney, Tiara
674
+ Roey Berman
675
+ Rohan Jain
676
+ Roman Bogorodskiy
677
+ Roman Donchenko
678
+ Romuald Brunet
679
+ ronaudinho
680
+ Ronny Pfannschmidt
681
+ Rory McCann
682
+ Ross Brattain
683
+ Roy Wellington Ⅳ
684
+ Ruairidh MacLeod
685
+ Russell Keith-Magee
686
+ Ryan Shepherd
687
+ Ryan Wooden
688
+ ryneeverett
689
+ Ryuma Asai
690
+ S. Guliaev
691
+ Sachi King
692
+ Salvatore Rinchiera
693
+ sandeepkiran-js
694
+ Sander Van Balen
695
+ Savio Jomton
696
+ schlamar
697
+ Scott Kitterman
698
+ Sean
699
+ seanj
700
+ Sebastian Jordan
701
+ Sebastian Schaetz
702
+ Segev Finer
703
+ SeongSoo Cho
704
+ Sepehr Rasouli
705
+ sepehrrasooli
706
+ Sergey Vasilyev
707
+ Seth Michael Larson
708
+ Seth Woodworth
709
+ Shahar Epstein
710
+ Shantanu
711
+ shenxianpeng
712
+ shireenrao
713
+ Shivansh-007
714
+ Shixian Sheng
715
+ Shlomi Fish
716
+ Shovan Maity
717
+ Simeon Visser
718
+ Simon Cross
719
+ Simon Pichugin
720
+ sinoroc
721
+ sinscary
722
+ snook92
723
+ socketubs
724
+ Sorin Sbarnea
725
+ Srinivas Nyayapati
726
+ Srishti Hegde
727
+ Stavros Korokithakis
728
+ Stefan Scherfke
729
+ Stefano Rivera
730
+ Stephan Erb
731
+ Stephen Payne
732
+ Stephen Rosen
733
+ stepshal
734
+ Steve (Gadget) Barnes
735
+ Steve Barnes
736
+ Steve Dower
737
+ Steve Kowalik
738
+ Steven Myint
739
+ Steven Silvester
740
+ stonebig
741
+ studioj
742
+ Stéphane Bidoul
743
+ Stéphane Bidoul (ACSONE)
744
+ Stéphane Klein
745
+ Sumana Harihareswara
746
+ Surbhi Sharma
747
+ Sviatoslav Sydorenko
748
+ Sviatoslav Sydorenko (Святослав Сидоренко)
749
+ Swat009
750
+ Sylvain
751
+ Takayuki SHIMIZUKAWA
752
+ Taneli Hukkinen
753
+ tbeswick
754
+ Thiago
755
+ Thijs Triemstra
756
+ Thomas Fenzl
757
+ Thomas Grainger
758
+ Thomas Guettler
759
+ Thomas Johansson
760
+ Thomas Kluyver
761
+ Thomas Smith
762
+ Thomas VINCENT
763
+ Tim D. Smith
764
+ Tim Gates
765
+ Tim Harder
766
+ Tim Heap
767
+ tim smith
768
+ tinruufu
769
+ Tobias Hermann
770
+ Tom Forbes
771
+ Tom Freudenheim
772
+ Tom V
773
+ Tomas Hrnciar
774
+ Tomas Orsava
775
+ Tomer Chachamu
776
+ Tommi Enenkel | AnB
777
+ Tomáš Hrnčiar
778
+ Tony Beswick
779
+ Tony Narlock
780
+ Tony Zhaocheng Tan
781
+ TonyBeswick
782
+ toonarmycaptain
783
+ Toshio Kuratomi
784
+ toxinu
785
+ Travis Swicegood
786
+ Tushar Sadhwani
787
+ Tzu-ping Chung
788
+ Valentin Haenel
789
+ Victor Stinner
790
+ victorvpaulo
791
+ Vikram - Google
792
+ Viktor Szépe
793
+ Ville Skyttä
794
+ Vinay Sajip
795
+ Vincent Philippon
796
+ Vinicyus Macedo
797
+ Vipul Kumar
798
+ Vitaly Babiy
799
+ Vladimir Fokow
800
+ Vladimir Rutsky
801
+ W. Trevor King
802
+ Wil Tan
803
+ Wilfred Hughes
804
+ William Edwards
805
+ William ML Leslie
806
+ William T Olson
807
+ William Woodruff
808
+ Wilson Mo
809
+ wim glenn
810
+ Winson Luk
811
+ Wolfgang Maier
812
+ Wu Zhenyu
813
+ XAMES3
814
+ Xavier Fernandez
815
+ Xianpeng Shen
816
+ xoviat
817
+ xtreak
818
+ YAMAMOTO Takashi
819
+ Yen Chi Hsuan
820
+ Yeray Diaz Diaz
821
+ Yoval P
822
+ Yu Jian
823
+ Yuan Jing Vincent Yan
824
+ Yuki Kobayashi
825
+ Yusuke Hayashi
826
+ zackzack38
827
+ Zearin
828
+ Zhiping Deng
829
+ ziebam
830
+ Zvezdan Petkovic
831
+ Łukasz Langa
832
+ Роман Донченко
833
+ Семён Марьясин
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2008-present The pip developers (see AUTHORS.txt file)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/cachecontrol/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright 2012-2021 Eric Larson
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/certifi/LICENSE ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This package contains a modified version of ca-bundle.crt:
2
+
3
+ ca-bundle.crt -- Bundle of CA Root Certificates
4
+
5
+ This is a bundle of X.509 certificates of public Certificate Authorities
6
+ (CA). These were automatically extracted from Mozilla's root certificates
7
+ file (certdata.txt). This file can be found in the mozilla source tree:
8
+ https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/certdata.txt
9
+ It contains the certificates in PEM format and therefore
10
+ can be directly used with curl / libcurl / php_curl, or with
11
+ an Apache+mod_ssl webserver for SSL client authentication.
12
+ Just configure this file as the SSLCACertificateFile.#
13
+
14
+ ***** BEGIN LICENSE BLOCK *****
15
+ This Source Code Form is subject to the terms of the Mozilla Public License,
16
+ v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain
17
+ one at http://mozilla.org/MPL/2.0/.
18
+
19
+ ***** END LICENSE BLOCK *****
20
+ @(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/dependency_groups/LICENSE.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present Stephen Rosen <sirosen0@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/distlib/LICENSE.txt ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ A. HISTORY OF THE SOFTWARE
2
+ ==========================
3
+
4
+ Python was created in the early 1990s by Guido van Rossum at Stichting
5
+ Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
6
+ as a successor of a language called ABC. Guido remains Python's
7
+ principal author, although it includes many contributions from others.
8
+
9
+ In 1995, Guido continued his work on Python at the Corporation for
10
+ National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
11
+ in Reston, Virginia where he released several versions of the
12
+ software.
13
+
14
+ In May 2000, Guido and the Python core development team moved to
15
+ BeOpen.com to form the BeOpen PythonLabs team. In October of the same
16
+ year, the PythonLabs team moved to Digital Creations (now Zope
17
+ Corporation, see http://www.zope.com). In 2001, the Python Software
18
+ Foundation (PSF, see http://www.python.org/psf/) was formed, a
19
+ non-profit organization created specifically to own Python-related
20
+ Intellectual Property. Zope Corporation is a sponsoring member of
21
+ the PSF.
22
+
23
+ All Python releases are Open Source (see http://www.opensource.org for
24
+ the Open Source Definition). Historically, most, but not all, Python
25
+ releases have also been GPL-compatible; the table below summarizes
26
+ the various releases.
27
+
28
+ Release Derived Year Owner GPL-
29
+ from compatible? (1)
30
+
31
+ 0.9.0 thru 1.2 1991-1995 CWI yes
32
+ 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
33
+ 1.6 1.5.2 2000 CNRI no
34
+ 2.0 1.6 2000 BeOpen.com no
35
+ 1.6.1 1.6 2001 CNRI yes (2)
36
+ 2.1 2.0+1.6.1 2001 PSF no
37
+ 2.0.1 2.0+1.6.1 2001 PSF yes
38
+ 2.1.1 2.1+2.0.1 2001 PSF yes
39
+ 2.2 2.1.1 2001 PSF yes
40
+ 2.1.2 2.1.1 2002 PSF yes
41
+ 2.1.3 2.1.2 2002 PSF yes
42
+ 2.2.1 2.2 2002 PSF yes
43
+ 2.2.2 2.2.1 2002 PSF yes
44
+ 2.2.3 2.2.2 2003 PSF yes
45
+ 2.3 2.2.2 2002-2003 PSF yes
46
+ 2.3.1 2.3 2002-2003 PSF yes
47
+ 2.3.2 2.3.1 2002-2003 PSF yes
48
+ 2.3.3 2.3.2 2002-2003 PSF yes
49
+ 2.3.4 2.3.3 2004 PSF yes
50
+ 2.3.5 2.3.4 2005 PSF yes
51
+ 2.4 2.3 2004 PSF yes
52
+ 2.4.1 2.4 2005 PSF yes
53
+ 2.4.2 2.4.1 2005 PSF yes
54
+ 2.4.3 2.4.2 2006 PSF yes
55
+ 2.4.4 2.4.3 2006 PSF yes
56
+ 2.5 2.4 2006 PSF yes
57
+ 2.5.1 2.5 2007 PSF yes
58
+ 2.5.2 2.5.1 2008 PSF yes
59
+ 2.5.3 2.5.2 2008 PSF yes
60
+ 2.6 2.5 2008 PSF yes
61
+ 2.6.1 2.6 2008 PSF yes
62
+ 2.6.2 2.6.1 2009 PSF yes
63
+ 2.6.3 2.6.2 2009 PSF yes
64
+ 2.6.4 2.6.3 2009 PSF yes
65
+ 2.6.5 2.6.4 2010 PSF yes
66
+ 3.0 2.6 2008 PSF yes
67
+ 3.0.1 3.0 2009 PSF yes
68
+ 3.1 3.0.1 2009 PSF yes
69
+ 3.1.1 3.1 2009 PSF yes
70
+ 3.1.2 3.1 2010 PSF yes
71
+ 3.2 3.1 2010 PSF yes
72
+
73
+ Footnotes:
74
+
75
+ (1) GPL-compatible doesn't mean that we're distributing Python under
76
+ the GPL. All Python licenses, unlike the GPL, let you distribute
77
+ a modified version without making your changes open source. The
78
+ GPL-compatible licenses make it possible to combine Python with
79
+ other software that is released under the GPL; the others don't.
80
+
81
+ (2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
82
+ because its license has a choice of law clause. According to
83
+ CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
84
+ is "not incompatible" with the GPL.
85
+
86
+ Thanks to the many outside volunteers who have worked under Guido's
87
+ direction to make these releases possible.
88
+
89
+
90
+ B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
91
+ ===============================================================
92
+
93
+ PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
94
+ --------------------------------------------
95
+
96
+ 1. This LICENSE AGREEMENT is between the Python Software Foundation
97
+ ("PSF"), and the Individual or Organization ("Licensee") accessing and
98
+ otherwise using this software ("Python") in source or binary form and
99
+ its associated documentation.
100
+
101
+ 2. Subject to the terms and conditions of this License Agreement, PSF hereby
102
+ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
103
+ analyze, test, perform and/or display publicly, prepare derivative works,
104
+ distribute, and otherwise use Python alone or in any derivative version,
105
+ provided, however, that PSF's License Agreement and PSF's notice of copyright,
106
+ i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
107
+ Python Software Foundation; All Rights Reserved" are retained in Python alone or
108
+ in any derivative version prepared by Licensee.
109
+
110
+ 3. In the event Licensee prepares a derivative work that is based on
111
+ or incorporates Python or any part thereof, and wants to make
112
+ the derivative work available to others as provided herein, then
113
+ Licensee hereby agrees to include in any such work a brief summary of
114
+ the changes made to Python.
115
+
116
+ 4. PSF is making Python available to Licensee on an "AS IS"
117
+ basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
118
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
119
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
120
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
121
+ INFRINGE ANY THIRD PARTY RIGHTS.
122
+
123
+ 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
124
+ FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
125
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
126
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
127
+
128
+ 6. This License Agreement will automatically terminate upon a material
129
+ breach of its terms and conditions.
130
+
131
+ 7. Nothing in this License Agreement shall be deemed to create any
132
+ relationship of agency, partnership, or joint venture between PSF and
133
+ Licensee. This License Agreement does not grant permission to use PSF
134
+ trademarks or trade name in a trademark sense to endorse or promote
135
+ products or services of Licensee, or any third party.
136
+
137
+ 8. By copying, installing or otherwise using Python, Licensee
138
+ agrees to be bound by the terms and conditions of this License
139
+ Agreement.
140
+
141
+
142
+ BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
143
+ -------------------------------------------
144
+
145
+ BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
146
+
147
+ 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
148
+ office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
149
+ Individual or Organization ("Licensee") accessing and otherwise using
150
+ this software in source or binary form and its associated
151
+ documentation ("the Software").
152
+
153
+ 2. Subject to the terms and conditions of this BeOpen Python License
154
+ Agreement, BeOpen hereby grants Licensee a non-exclusive,
155
+ royalty-free, world-wide license to reproduce, analyze, test, perform
156
+ and/or display publicly, prepare derivative works, distribute, and
157
+ otherwise use the Software alone or in any derivative version,
158
+ provided, however, that the BeOpen Python License is retained in the
159
+ Software, alone or in any derivative version prepared by Licensee.
160
+
161
+ 3. BeOpen is making the Software available to Licensee on an "AS IS"
162
+ basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
163
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
164
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
165
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
166
+ INFRINGE ANY THIRD PARTY RIGHTS.
167
+
168
+ 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
169
+ SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
170
+ AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
171
+ DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
172
+
173
+ 5. This License Agreement will automatically terminate upon a material
174
+ breach of its terms and conditions.
175
+
176
+ 6. This License Agreement shall be governed by and interpreted in all
177
+ respects by the law of the State of California, excluding conflict of
178
+ law provisions. Nothing in this License Agreement shall be deemed to
179
+ create any relationship of agency, partnership, or joint venture
180
+ between BeOpen and Licensee. This License Agreement does not grant
181
+ permission to use BeOpen trademarks or trade names in a trademark
182
+ sense to endorse or promote products or services of Licensee, or any
183
+ third party. As an exception, the "BeOpen Python" logos available at
184
+ http://www.pythonlabs.com/logos.html may be used according to the
185
+ permissions granted on that web page.
186
+
187
+ 7. By copying, installing or otherwise using the software, Licensee
188
+ agrees to be bound by the terms and conditions of this License
189
+ Agreement.
190
+
191
+
192
+ CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
193
+ ---------------------------------------
194
+
195
+ 1. This LICENSE AGREEMENT is between the Corporation for National
196
+ Research Initiatives, having an office at 1895 Preston White Drive,
197
+ Reston, VA 20191 ("CNRI"), and the Individual or Organization
198
+ ("Licensee") accessing and otherwise using Python 1.6.1 software in
199
+ source or binary form and its associated documentation.
200
+
201
+ 2. Subject to the terms and conditions of this License Agreement, CNRI
202
+ hereby grants Licensee a nonexclusive, royalty-free, world-wide
203
+ license to reproduce, analyze, test, perform and/or display publicly,
204
+ prepare derivative works, distribute, and otherwise use Python 1.6.1
205
+ alone or in any derivative version, provided, however, that CNRI's
206
+ License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
207
+ 1995-2001 Corporation for National Research Initiatives; All Rights
208
+ Reserved" are retained in Python 1.6.1 alone or in any derivative
209
+ version prepared by Licensee. Alternately, in lieu of CNRI's License
210
+ Agreement, Licensee may substitute the following text (omitting the
211
+ quotes): "Python 1.6.1 is made available subject to the terms and
212
+ conditions in CNRI's License Agreement. This Agreement together with
213
+ Python 1.6.1 may be located on the Internet using the following
214
+ unique, persistent identifier (known as a handle): 1895.22/1013. This
215
+ Agreement may also be obtained from a proxy server on the Internet
216
+ using the following URL: http://hdl.handle.net/1895.22/1013".
217
+
218
+ 3. In the event Licensee prepares a derivative work that is based on
219
+ or incorporates Python 1.6.1 or any part thereof, and wants to make
220
+ the derivative work available to others as provided herein, then
221
+ Licensee hereby agrees to include in any such work a brief summary of
222
+ the changes made to Python 1.6.1.
223
+
224
+ 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
225
+ basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
226
+ IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
227
+ DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
228
+ FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
229
+ INFRINGE ANY THIRD PARTY RIGHTS.
230
+
231
+ 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
232
+ 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
233
+ A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
234
+ OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
235
+
236
+ 6. This License Agreement will automatically terminate upon a material
237
+ breach of its terms and conditions.
238
+
239
+ 7. This License Agreement shall be governed by the federal
240
+ intellectual property law of the United States, including without
241
+ limitation the federal copyright law, and, to the extent such
242
+ U.S. federal law does not apply, by the law of the Commonwealth of
243
+ Virginia, excluding Virginia's conflict of law provisions.
244
+ Notwithstanding the foregoing, with regard to derivative works based
245
+ on Python 1.6.1 that incorporate non-separable material that was
246
+ previously distributed under the GNU General Public License (GPL), the
247
+ law of the Commonwealth of Virginia shall govern this License
248
+ Agreement only as to issues arising under or with respect to
249
+ Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
250
+ License Agreement shall be deemed to create any relationship of
251
+ agency, partnership, or joint venture between CNRI and Licensee. This
252
+ License Agreement does not grant permission to use CNRI trademarks or
253
+ trade name in a trademark sense to endorse or promote products or
254
+ services of Licensee, or any third party.
255
+
256
+ 8. By clicking on the "ACCEPT" button where indicated, or by copying,
257
+ installing or otherwise using Python 1.6.1, Licensee agrees to be
258
+ bound by the terms and conditions of this License Agreement.
259
+
260
+ ACCEPT
261
+
262
+
263
+ CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
264
+ --------------------------------------------------
265
+
266
+ Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
267
+ The Netherlands. All rights reserved.
268
+
269
+ Permission to use, copy, modify, and distribute this software and its
270
+ documentation for any purpose and without fee is hereby granted,
271
+ provided that the above copyright notice appear in all copies and that
272
+ both that copyright notice and this permission notice appear in
273
+ supporting documentation, and that the name of Stichting Mathematisch
274
+ Centrum or CWI not be used in advertising or publicity pertaining to
275
+ distribution of the software without specific, written prior
276
+ permission.
277
+
278
+ STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
279
+ THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
280
+ FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
281
+ FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
282
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
283
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
284
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/distro/LICENSE ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright {yyyy} {name of copyright owner}
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
202
+
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/idna/LICENSE.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2013-2024, Kim Davies and contributors.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the distribution.
16
+
17
+ 3. Neither the name of the copyright holder nor the names of its
18
+ contributors may be used to endorse or promote products derived from
19
+ this software without specific prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/msgpack/COPYING ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (C) 2008-2011 INADA Naoki <songofacandy@gmail.com>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ This software is made available under the terms of *either* of the licenses
2
+ found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made
3
+ under the terms of *both* these licenses.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.APACHE ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/packaging/LICENSE.BSD ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) Donald Stufft and individual contributors.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ 2. Redistributions in binary form must reproduce the above copyright
11
+ notice, this list of conditions and the following disclaimer in the
12
+ documentation and/or other materials provided with the distribution.
13
+
14
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pkg_resources/LICENSE ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Permission is hereby granted, free of charge, to any person obtaining a copy
2
+ of this software and associated documentation files (the "Software"), to
3
+ deal in the Software without restriction, including without limitation the
4
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
5
+ sell copies of the Software, and to permit persons to whom the Software is
6
+ furnished to do so, subject to the following conditions:
7
+
8
+ The above copyright notice and this permission notice shall be included in
9
+ all copies or substantial portions of the Software.
10
+
11
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
16
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
17
+ IN THE SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/platformdirs/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2010-202x The platformdirs developers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pygments/LICENSE ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2006-2022 by the respective authors (see AUTHORS file).
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the distribution.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/pyproject_hooks/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Thomas Kluyver
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/requests/LICENSE ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/resolvelib/LICENSE ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2018, Tzu-ping Chung <uranusjr@gmail.com>
2
+
3
+ Permission to use, copy, modify, and distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/rich/LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2020 Will McGugan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Taneli Hukkinen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli/LICENSE-HEADER ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ SPDX-License-Identifier: MIT
2
+ SPDX-FileCopyrightText: 2021 Taneli Hukkinen
3
+ Licensed to PSF under a Contributor Agreement.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/tomli_w/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Taneli Hukkinen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/truststore/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Seth Michael Larson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/licenses/src/pip/_vendor/urllib3/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2008-2020 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
.venv/Lib/site-packages/pip-25.2.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
.venv/Lib/site-packages/pip/_vendor/urllib3/util/response.py ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ from email.errors import MultipartInvariantViolationDefect, StartBoundaryNotFoundDefect
4
+
5
+ from ..exceptions import HeaderParsingError
6
+ from ..packages.six.moves import http_client as httplib
7
+
8
+
9
+ def is_fp_closed(obj):
10
+ """
11
+ Checks whether a given file-like object is closed.
12
+
13
+ :param obj:
14
+ The file-like object to check.
15
+ """
16
+
17
+ try:
18
+ # Check `isclosed()` first, in case Python3 doesn't set `closed`.
19
+ # GH Issue #928
20
+ return obj.isclosed()
21
+ except AttributeError:
22
+ pass
23
+
24
+ try:
25
+ # Check via the official file-like-object way.
26
+ return obj.closed
27
+ except AttributeError:
28
+ pass
29
+
30
+ try:
31
+ # Check if the object is a container for another file-like object that
32
+ # gets released on exhaustion (e.g. HTTPResponse).
33
+ return obj.fp is None
34
+ except AttributeError:
35
+ pass
36
+
37
+ raise ValueError("Unable to determine whether fp is closed.")
38
+
39
+
40
+ def assert_header_parsing(headers):
41
+ """
42
+ Asserts whether all headers have been successfully parsed.
43
+ Extracts encountered errors from the result of parsing headers.
44
+
45
+ Only works on Python 3.
46
+
47
+ :param http.client.HTTPMessage headers: Headers to verify.
48
+
49
+ :raises urllib3.exceptions.HeaderParsingError:
50
+ If parsing errors are found.
51
+ """
52
+
53
+ # This will fail silently if we pass in the wrong kind of parameter.
54
+ # To make debugging easier add an explicit check.
55
+ if not isinstance(headers, httplib.HTTPMessage):
56
+ raise TypeError("expected httplib.Message, got {0}.".format(type(headers)))
57
+
58
+ defects = getattr(headers, "defects", None)
59
+ get_payload = getattr(headers, "get_payload", None)
60
+
61
+ unparsed_data = None
62
+ if get_payload:
63
+ # get_payload is actually email.message.Message.get_payload;
64
+ # we're only interested in the result if it's not a multipart message
65
+ if not headers.is_multipart():
66
+ payload = get_payload()
67
+
68
+ if isinstance(payload, (bytes, str)):
69
+ unparsed_data = payload
70
+ if defects:
71
+ # httplib is assuming a response body is available
72
+ # when parsing headers even when httplib only sends
73
+ # header data to parse_headers() This results in
74
+ # defects on multipart responses in particular.
75
+ # See: https://github.com/urllib3/urllib3/issues/800
76
+
77
+ # So we ignore the following defects:
78
+ # - StartBoundaryNotFoundDefect:
79
+ # The claimed start boundary was never found.
80
+ # - MultipartInvariantViolationDefect:
81
+ # A message claimed to be a multipart but no subparts were found.
82
+ defects = [
83
+ defect
84
+ for defect in defects
85
+ if not isinstance(
86
+ defect, (StartBoundaryNotFoundDefect, MultipartInvariantViolationDefect)
87
+ )
88
+ ]
89
+
90
+ if defects or unparsed_data:
91
+ raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
92
+
93
+
94
+ def is_response_to_head(response):
95
+ """
96
+ Checks whether the request of a response has been a HEAD-request.
97
+ Handles the quirks of AppEngine.
98
+
99
+ :param http.client.HTTPResponse response:
100
+ Response to check if the originating request
101
+ used 'HEAD' as a method.
102
+ """
103
+ # FIXME: Can we do this somehow without accessing private httplib _method?
104
+ method = response._method
105
+ if isinstance(method, int): # Platform-specific: Appengine
106
+ return method == 3
107
+ return method.upper() == "HEAD"
.venv/Lib/site-packages/pip/_vendor/urllib3/util/retry.py ADDED
@@ -0,0 +1,622 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ import email
4
+ import logging
5
+ import re
6
+ import time
7
+ import warnings
8
+ from collections import namedtuple
9
+ from itertools import takewhile
10
+
11
+ from ..exceptions import (
12
+ ConnectTimeoutError,
13
+ InvalidHeader,
14
+ MaxRetryError,
15
+ ProtocolError,
16
+ ProxyError,
17
+ ReadTimeoutError,
18
+ ResponseError,
19
+ )
20
+ from ..packages import six
21
+
22
+ log = logging.getLogger(__name__)
23
+
24
+
25
+ # Data structure for representing the metadata of requests that result in a retry.
26
+ RequestHistory = namedtuple(
27
+ "RequestHistory", ["method", "url", "error", "status", "redirect_location"]
28
+ )
29
+
30
+
31
+ # TODO: In v2 we can remove this sentinel and metaclass with deprecated options.
32
+ _Default = object()
33
+
34
+
35
+ class _RetryMeta(type):
36
+ @property
37
+ def DEFAULT_METHOD_WHITELIST(cls):
38
+ warnings.warn(
39
+ "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and "
40
+ "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead",
41
+ DeprecationWarning,
42
+ )
43
+ return cls.DEFAULT_ALLOWED_METHODS
44
+
45
+ @DEFAULT_METHOD_WHITELIST.setter
46
+ def DEFAULT_METHOD_WHITELIST(cls, value):
47
+ warnings.warn(
48
+ "Using 'Retry.DEFAULT_METHOD_WHITELIST' is deprecated and "
49
+ "will be removed in v2.0. Use 'Retry.DEFAULT_ALLOWED_METHODS' instead",
50
+ DeprecationWarning,
51
+ )
52
+ cls.DEFAULT_ALLOWED_METHODS = value
53
+
54
+ @property
55
+ def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls):
56
+ warnings.warn(
57
+ "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and "
58
+ "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead",
59
+ DeprecationWarning,
60
+ )
61
+ return cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT
62
+
63
+ @DEFAULT_REDIRECT_HEADERS_BLACKLIST.setter
64
+ def DEFAULT_REDIRECT_HEADERS_BLACKLIST(cls, value):
65
+ warnings.warn(
66
+ "Using 'Retry.DEFAULT_REDIRECT_HEADERS_BLACKLIST' is deprecated and "
67
+ "will be removed in v2.0. Use 'Retry.DEFAULT_REMOVE_HEADERS_ON_REDIRECT' instead",
68
+ DeprecationWarning,
69
+ )
70
+ cls.DEFAULT_REMOVE_HEADERS_ON_REDIRECT = value
71
+
72
+ @property
73
+ def BACKOFF_MAX(cls):
74
+ warnings.warn(
75
+ "Using 'Retry.BACKOFF_MAX' is deprecated and "
76
+ "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
77
+ DeprecationWarning,
78
+ )
79
+ return cls.DEFAULT_BACKOFF_MAX
80
+
81
+ @BACKOFF_MAX.setter
82
+ def BACKOFF_MAX(cls, value):
83
+ warnings.warn(
84
+ "Using 'Retry.BACKOFF_MAX' is deprecated and "
85
+ "will be removed in v2.0. Use 'Retry.DEFAULT_BACKOFF_MAX' instead",
86
+ DeprecationWarning,
87
+ )
88
+ cls.DEFAULT_BACKOFF_MAX = value
89
+
90
+
91
+ @six.add_metaclass(_RetryMeta)
92
+ class Retry(object):
93
+ """Retry configuration.
94
+
95
+ Each retry attempt will create a new Retry object with updated values, so
96
+ they can be safely reused.
97
+
98
+ Retries can be defined as a default for a pool::
99
+
100
+ retries = Retry(connect=5, read=2, redirect=5)
101
+ http = PoolManager(retries=retries)
102
+ response = http.request('GET', 'http://example.com/')
103
+
104
+ Or per-request (which overrides the default for the pool)::
105
+
106
+ response = http.request('GET', 'http://example.com/', retries=Retry(10))
107
+
108
+ Retries can be disabled by passing ``False``::
109
+
110
+ response = http.request('GET', 'http://example.com/', retries=False)
111
+
112
+ Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless
113
+ retries are disabled, in which case the causing exception will be raised.
114
+
115
+ :param int total:
116
+ Total number of retries to allow. Takes precedence over other counts.
117
+
118
+ Set to ``None`` to remove this constraint and fall back on other
119
+ counts.
120
+
121
+ Set to ``0`` to fail on the first retry.
122
+
123
+ Set to ``False`` to disable and imply ``raise_on_redirect=False``.
124
+
125
+ :param int connect:
126
+ How many connection-related errors to retry on.
127
+
128
+ These are errors raised before the request is sent to the remote server,
129
+ which we assume has not triggered the server to process the request.
130
+
131
+ Set to ``0`` to fail on the first retry of this type.
132
+
133
+ :param int read:
134
+ How many times to retry on read errors.
135
+
136
+ These errors are raised after the request was sent to the server, so the
137
+ request may have side-effects.
138
+
139
+ Set to ``0`` to fail on the first retry of this type.
140
+
141
+ :param int redirect:
142
+ How many redirects to perform. Limit this to avoid infinite redirect
143
+ loops.
144
+
145
+ A redirect is a HTTP response with a status code 301, 302, 303, 307 or
146
+ 308.
147
+
148
+ Set to ``0`` to fail on the first retry of this type.
149
+
150
+ Set to ``False`` to disable and imply ``raise_on_redirect=False``.
151
+
152
+ :param int status:
153
+ How many times to retry on bad status codes.
154
+
155
+ These are retries made on responses, where status code matches
156
+ ``status_forcelist``.
157
+
158
+ Set to ``0`` to fail on the first retry of this type.
159
+
160
+ :param int other:
161
+ How many times to retry on other errors.
162
+
163
+ Other errors are errors that are not connect, read, redirect or status errors.
164
+ These errors might be raised after the request was sent to the server, so the
165
+ request might have side-effects.
166
+
167
+ Set to ``0`` to fail on the first retry of this type.
168
+
169
+ If ``total`` is not set, it's a good idea to set this to 0 to account
170
+ for unexpected edge cases and avoid infinite retry loops.
171
+
172
+ :param iterable allowed_methods:
173
+ Set of uppercased HTTP method verbs that we should retry on.
174
+
175
+ By default, we only retry on methods which are considered to be
176
+ idempotent (multiple requests with the same parameters end with the
177
+ same state). See :attr:`Retry.DEFAULT_ALLOWED_METHODS`.
178
+
179
+ Set to a ``False`` value to retry on any verb.
180
+
181
+ .. warning::
182
+
183
+ Previously this parameter was named ``method_whitelist``, that
184
+ usage is deprecated in v1.26.0 and will be removed in v2.0.
185
+
186
+ :param iterable status_forcelist:
187
+ A set of integer HTTP status codes that we should force a retry on.
188
+ A retry is initiated if the request method is in ``allowed_methods``
189
+ and the response status code is in ``status_forcelist``.
190
+
191
+ By default, this is disabled with ``None``.
192
+
193
+ :param float backoff_factor:
194
+ A backoff factor to apply between attempts after the second try
195
+ (most errors are resolved immediately by a second try without a
196
+ delay). urllib3 will sleep for::
197
+
198
+ {backoff factor} * (2 ** ({number of total retries} - 1))
199
+
200
+ seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep
201
+ for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer
202
+ than :attr:`Retry.DEFAULT_BACKOFF_MAX`.
203
+
204
+ By default, backoff is disabled (set to 0).
205
+
206
+ :param bool raise_on_redirect: Whether, if the number of redirects is
207
+ exhausted, to raise a MaxRetryError, or to return a response with a
208
+ response code in the 3xx range.
209
+
210
+ :param bool raise_on_status: Similar meaning to ``raise_on_redirect``:
211
+ whether we should raise an exception, or return a response,
212
+ if status falls in ``status_forcelist`` range and retries have
213
+ been exhausted.
214
+
215
+ :param tuple history: The history of the request encountered during
216
+ each call to :meth:`~Retry.increment`. The list is in the order
217
+ the requests occurred. Each list item is of class :class:`RequestHistory`.
218
+
219
+ :param bool respect_retry_after_header:
220
+ Whether to respect Retry-After header on status codes defined as
221
+ :attr:`Retry.RETRY_AFTER_STATUS_CODES` or not.
222
+
223
+ :param iterable remove_headers_on_redirect:
224
+ Sequence of headers to remove from the request when a response
225
+ indicating a redirect is returned before firing off the redirected
226
+ request.
227
+ """
228
+
229
+ #: Default methods to be used for ``allowed_methods``
230
+ DEFAULT_ALLOWED_METHODS = frozenset(
231
+ ["HEAD", "GET", "PUT", "DELETE", "OPTIONS", "TRACE"]
232
+ )
233
+
234
+ #: Default status codes to be used for ``status_forcelist``
235
+ RETRY_AFTER_STATUS_CODES = frozenset([413, 429, 503])
236
+
237
+ #: Default headers to be used for ``remove_headers_on_redirect``
238
+ DEFAULT_REMOVE_HEADERS_ON_REDIRECT = frozenset(
239
+ ["Cookie", "Authorization", "Proxy-Authorization"]
240
+ )
241
+
242
+ #: Maximum backoff time.
243
+ DEFAULT_BACKOFF_MAX = 120
244
+
245
+ def __init__(
246
+ self,
247
+ total=10,
248
+ connect=None,
249
+ read=None,
250
+ redirect=None,
251
+ status=None,
252
+ other=None,
253
+ allowed_methods=_Default,
254
+ status_forcelist=None,
255
+ backoff_factor=0,
256
+ raise_on_redirect=True,
257
+ raise_on_status=True,
258
+ history=None,
259
+ respect_retry_after_header=True,
260
+ remove_headers_on_redirect=_Default,
261
+ # TODO: Deprecated, remove in v2.0
262
+ method_whitelist=_Default,
263
+ ):
264
+
265
+ if method_whitelist is not _Default:
266
+ if allowed_methods is not _Default:
267
+ raise ValueError(
268
+ "Using both 'allowed_methods' and "
269
+ "'method_whitelist' together is not allowed. "
270
+ "Instead only use 'allowed_methods'"
271
+ )
272
+ warnings.warn(
273
+ "Using 'method_whitelist' with Retry is deprecated and "
274
+ "will be removed in v2.0. Use 'allowed_methods' instead",
275
+ DeprecationWarning,
276
+ stacklevel=2,
277
+ )
278
+ allowed_methods = method_whitelist
279
+ if allowed_methods is _Default:
280
+ allowed_methods = self.DEFAULT_ALLOWED_METHODS
281
+ if remove_headers_on_redirect is _Default:
282
+ remove_headers_on_redirect = self.DEFAULT_REMOVE_HEADERS_ON_REDIRECT
283
+
284
+ self.total = total
285
+ self.connect = connect
286
+ self.read = read
287
+ self.status = status
288
+ self.other = other
289
+
290
+ if redirect is False or total is False:
291
+ redirect = 0
292
+ raise_on_redirect = False
293
+
294
+ self.redirect = redirect
295
+ self.status_forcelist = status_forcelist or set()
296
+ self.allowed_methods = allowed_methods
297
+ self.backoff_factor = backoff_factor
298
+ self.raise_on_redirect = raise_on_redirect
299
+ self.raise_on_status = raise_on_status
300
+ self.history = history or tuple()
301
+ self.respect_retry_after_header = respect_retry_after_header
302
+ self.remove_headers_on_redirect = frozenset(
303
+ [h.lower() for h in remove_headers_on_redirect]
304
+ )
305
+
306
+ def new(self, **kw):
307
+ params = dict(
308
+ total=self.total,
309
+ connect=self.connect,
310
+ read=self.read,
311
+ redirect=self.redirect,
312
+ status=self.status,
313
+ other=self.other,
314
+ status_forcelist=self.status_forcelist,
315
+ backoff_factor=self.backoff_factor,
316
+ raise_on_redirect=self.raise_on_redirect,
317
+ raise_on_status=self.raise_on_status,
318
+ history=self.history,
319
+ remove_headers_on_redirect=self.remove_headers_on_redirect,
320
+ respect_retry_after_header=self.respect_retry_after_header,
321
+ )
322
+
323
+ # TODO: If already given in **kw we use what's given to us
324
+ # If not given we need to figure out what to pass. We decide
325
+ # based on whether our class has the 'method_whitelist' property
326
+ # and if so we pass the deprecated 'method_whitelist' otherwise
327
+ # we use 'allowed_methods'. Remove in v2.0
328
+ if "method_whitelist" not in kw and "allowed_methods" not in kw:
329
+ if "method_whitelist" in self.__dict__:
330
+ warnings.warn(
331
+ "Using 'method_whitelist' with Retry is deprecated and "
332
+ "will be removed in v2.0. Use 'allowed_methods' instead",
333
+ DeprecationWarning,
334
+ )
335
+ params["method_whitelist"] = self.allowed_methods
336
+ else:
337
+ params["allowed_methods"] = self.allowed_methods
338
+
339
+ params.update(kw)
340
+ return type(self)(**params)
341
+
342
+ @classmethod
343
+ def from_int(cls, retries, redirect=True, default=None):
344
+ """Backwards-compatibility for the old retries format."""
345
+ if retries is None:
346
+ retries = default if default is not None else cls.DEFAULT
347
+
348
+ if isinstance(retries, Retry):
349
+ return retries
350
+
351
+ redirect = bool(redirect) and None
352
+ new_retries = cls(retries, redirect=redirect)
353
+ log.debug("Converted retries value: %r -> %r", retries, new_retries)
354
+ return new_retries
355
+
356
+ def get_backoff_time(self):
357
+ """Formula for computing the current backoff
358
+
359
+ :rtype: float
360
+ """
361
+ # We want to consider only the last consecutive errors sequence (Ignore redirects).
362
+ consecutive_errors_len = len(
363
+ list(
364
+ takewhile(lambda x: x.redirect_location is None, reversed(self.history))
365
+ )
366
+ )
367
+ if consecutive_errors_len <= 1:
368
+ return 0
369
+
370
+ backoff_value = self.backoff_factor * (2 ** (consecutive_errors_len - 1))
371
+ return min(self.DEFAULT_BACKOFF_MAX, backoff_value)
372
+
373
+ def parse_retry_after(self, retry_after):
374
+ # Whitespace: https://tools.ietf.org/html/rfc7230#section-3.2.4
375
+ if re.match(r"^\s*[0-9]+\s*$", retry_after):
376
+ seconds = int(retry_after)
377
+ else:
378
+ retry_date_tuple = email.utils.parsedate_tz(retry_after)
379
+ if retry_date_tuple is None:
380
+ raise InvalidHeader("Invalid Retry-After header: %s" % retry_after)
381
+ if retry_date_tuple[9] is None: # Python 2
382
+ # Assume UTC if no timezone was specified
383
+ # On Python2.7, parsedate_tz returns None for a timezone offset
384
+ # instead of 0 if no timezone is given, where mktime_tz treats
385
+ # a None timezone offset as local time.
386
+ retry_date_tuple = retry_date_tuple[:9] + (0,) + retry_date_tuple[10:]
387
+
388
+ retry_date = email.utils.mktime_tz(retry_date_tuple)
389
+ seconds = retry_date - time.time()
390
+
391
+ if seconds < 0:
392
+ seconds = 0
393
+
394
+ return seconds
395
+
396
+ def get_retry_after(self, response):
397
+ """Get the value of Retry-After in seconds."""
398
+
399
+ retry_after = response.headers.get("Retry-After")
400
+
401
+ if retry_after is None:
402
+ return None
403
+
404
+ return self.parse_retry_after(retry_after)
405
+
406
+ def sleep_for_retry(self, response=None):
407
+ retry_after = self.get_retry_after(response)
408
+ if retry_after:
409
+ time.sleep(retry_after)
410
+ return True
411
+
412
+ return False
413
+
414
+ def _sleep_backoff(self):
415
+ backoff = self.get_backoff_time()
416
+ if backoff <= 0:
417
+ return
418
+ time.sleep(backoff)
419
+
420
+ def sleep(self, response=None):
421
+ """Sleep between retry attempts.
422
+
423
+ This method will respect a server's ``Retry-After`` response header
424
+ and sleep the duration of the time requested. If that is not present, it
425
+ will use an exponential backoff. By default, the backoff factor is 0 and
426
+ this method will return immediately.
427
+ """
428
+
429
+ if self.respect_retry_after_header and response:
430
+ slept = self.sleep_for_retry(response)
431
+ if slept:
432
+ return
433
+
434
+ self._sleep_backoff()
435
+
436
+ def _is_connection_error(self, err):
437
+ """Errors when we're fairly sure that the server did not receive the
438
+ request, so it should be safe to retry.
439
+ """
440
+ if isinstance(err, ProxyError):
441
+ err = err.original_error
442
+ return isinstance(err, ConnectTimeoutError)
443
+
444
+ def _is_read_error(self, err):
445
+ """Errors that occur after the request has been started, so we should
446
+ assume that the server began processing it.
447
+ """
448
+ return isinstance(err, (ReadTimeoutError, ProtocolError))
449
+
450
+ def _is_method_retryable(self, method):
451
+ """Checks if a given HTTP method should be retried upon, depending if
452
+ it is included in the allowed_methods
453
+ """
454
+ # TODO: For now favor if the Retry implementation sets its own method_whitelist
455
+ # property outside of our constructor to avoid breaking custom implementations.
456
+ if "method_whitelist" in self.__dict__:
457
+ warnings.warn(
458
+ "Using 'method_whitelist' with Retry is deprecated and "
459
+ "will be removed in v2.0. Use 'allowed_methods' instead",
460
+ DeprecationWarning,
461
+ )
462
+ allowed_methods = self.method_whitelist
463
+ else:
464
+ allowed_methods = self.allowed_methods
465
+
466
+ if allowed_methods and method.upper() not in allowed_methods:
467
+ return False
468
+ return True
469
+
470
+ def is_retry(self, method, status_code, has_retry_after=False):
471
+ """Is this method/status code retryable? (Based on allowlists and control
472
+ variables such as the number of total retries to allow, whether to
473
+ respect the Retry-After header, whether this header is present, and
474
+ whether the returned status code is on the list of status codes to
475
+ be retried upon on the presence of the aforementioned header)
476
+ """
477
+ if not self._is_method_retryable(method):
478
+ return False
479
+
480
+ if self.status_forcelist and status_code in self.status_forcelist:
481
+ return True
482
+
483
+ return (
484
+ self.total
485
+ and self.respect_retry_after_header
486
+ and has_retry_after
487
+ and (status_code in self.RETRY_AFTER_STATUS_CODES)
488
+ )
489
+
490
+ def is_exhausted(self):
491
+ """Are we out of retries?"""
492
+ retry_counts = (
493
+ self.total,
494
+ self.connect,
495
+ self.read,
496
+ self.redirect,
497
+ self.status,
498
+ self.other,
499
+ )
500
+ retry_counts = list(filter(None, retry_counts))
501
+ if not retry_counts:
502
+ return False
503
+
504
+ return min(retry_counts) < 0
505
+
506
+ def increment(
507
+ self,
508
+ method=None,
509
+ url=None,
510
+ response=None,
511
+ error=None,
512
+ _pool=None,
513
+ _stacktrace=None,
514
+ ):
515
+ """Return a new Retry object with incremented retry counters.
516
+
517
+ :param response: A response object, or None, if the server did not
518
+ return a response.
519
+ :type response: :class:`~urllib3.response.HTTPResponse`
520
+ :param Exception error: An error encountered during the request, or
521
+ None if the response was received successfully.
522
+
523
+ :return: A new ``Retry`` object.
524
+ """
525
+ if self.total is False and error:
526
+ # Disabled, indicate to re-raise the error.
527
+ raise six.reraise(type(error), error, _stacktrace)
528
+
529
+ total = self.total
530
+ if total is not None:
531
+ total -= 1
532
+
533
+ connect = self.connect
534
+ read = self.read
535
+ redirect = self.redirect
536
+ status_count = self.status
537
+ other = self.other
538
+ cause = "unknown"
539
+ status = None
540
+ redirect_location = None
541
+
542
+ if error and self._is_connection_error(error):
543
+ # Connect retry?
544
+ if connect is False:
545
+ raise six.reraise(type(error), error, _stacktrace)
546
+ elif connect is not None:
547
+ connect -= 1
548
+
549
+ elif error and self._is_read_error(error):
550
+ # Read retry?
551
+ if read is False or not self._is_method_retryable(method):
552
+ raise six.reraise(type(error), error, _stacktrace)
553
+ elif read is not None:
554
+ read -= 1
555
+
556
+ elif error:
557
+ # Other retry?
558
+ if other is not None:
559
+ other -= 1
560
+
561
+ elif response and response.get_redirect_location():
562
+ # Redirect retry?
563
+ if redirect is not None:
564
+ redirect -= 1
565
+ cause = "too many redirects"
566
+ redirect_location = response.get_redirect_location()
567
+ status = response.status
568
+
569
+ else:
570
+ # Incrementing because of a server error like a 500 in
571
+ # status_forcelist and the given method is in the allowed_methods
572
+ cause = ResponseError.GENERIC_ERROR
573
+ if response and response.status:
574
+ if status_count is not None:
575
+ status_count -= 1
576
+ cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)
577
+ status = response.status
578
+
579
+ history = self.history + (
580
+ RequestHistory(method, url, error, status, redirect_location),
581
+ )
582
+
583
+ new_retry = self.new(
584
+ total=total,
585
+ connect=connect,
586
+ read=read,
587
+ redirect=redirect,
588
+ status=status_count,
589
+ other=other,
590
+ history=history,
591
+ )
592
+
593
+ if new_retry.is_exhausted():
594
+ raise MaxRetryError(_pool, url, error or ResponseError(cause))
595
+
596
+ log.debug("Incremented Retry for (url='%s'): %r", url, new_retry)
597
+
598
+ return new_retry
599
+
600
+ def __repr__(self):
601
+ return (
602
+ "{cls.__name__}(total={self.total}, connect={self.connect}, "
603
+ "read={self.read}, redirect={self.redirect}, status={self.status})"
604
+ ).format(cls=type(self), self=self)
605
+
606
+ def __getattr__(self, item):
607
+ if item == "method_whitelist":
608
+ # TODO: Remove this deprecated alias in v2.0
609
+ warnings.warn(
610
+ "Using 'method_whitelist' with Retry is deprecated and "
611
+ "will be removed in v2.0. Use 'allowed_methods' instead",
612
+ DeprecationWarning,
613
+ )
614
+ return self.allowed_methods
615
+ try:
616
+ return getattr(super(Retry, self), item)
617
+ except AttributeError:
618
+ return getattr(Retry, item)
619
+
620
+
621
+ # For backwards compatibility (equivalent to pre-v1.9):
622
+ Retry.DEFAULT = Retry(3)
.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_.py ADDED
@@ -0,0 +1,504 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ import hashlib
4
+ import hmac
5
+ import os
6
+ import sys
7
+ import warnings
8
+ from binascii import hexlify, unhexlify
9
+
10
+ from ..exceptions import (
11
+ InsecurePlatformWarning,
12
+ ProxySchemeUnsupported,
13
+ SNIMissingWarning,
14
+ SSLError,
15
+ )
16
+ from ..packages import six
17
+ from .url import BRACELESS_IPV6_ADDRZ_RE, IPV4_RE
18
+
19
+ SSLContext = None
20
+ SSLTransport = None
21
+ HAS_SNI = False
22
+ IS_PYOPENSSL = False
23
+ IS_SECURETRANSPORT = False
24
+ ALPN_PROTOCOLS = ["http/1.1"]
25
+
26
+ # Maps the length of a digest to a possible hash function producing this digest
27
+ HASHFUNC_MAP = {
28
+ length: getattr(hashlib, algorithm, None)
29
+ for length, algorithm in ((32, "md5"), (40, "sha1"), (64, "sha256"))
30
+ }
31
+
32
+
33
+ def _const_compare_digest_backport(a, b):
34
+ """
35
+ Compare two digests of equal length in constant time.
36
+
37
+ The digests must be of type str/bytes.
38
+ Returns True if the digests match, and False otherwise.
39
+ """
40
+ result = abs(len(a) - len(b))
41
+ for left, right in zip(bytearray(a), bytearray(b)):
42
+ result |= left ^ right
43
+ return result == 0
44
+
45
+
46
+ _const_compare_digest = getattr(hmac, "compare_digest", _const_compare_digest_backport)
47
+
48
+ try: # Test for SSL features
49
+ import ssl
50
+ from ssl import CERT_REQUIRED, wrap_socket
51
+ except ImportError:
52
+ pass
53
+
54
+ try:
55
+ from ssl import HAS_SNI # Has SNI?
56
+ except ImportError:
57
+ pass
58
+
59
+ try:
60
+ from .ssltransport import SSLTransport
61
+ except ImportError:
62
+ pass
63
+
64
+
65
+ try: # Platform-specific: Python 3.6
66
+ from ssl import PROTOCOL_TLS
67
+
68
+ PROTOCOL_SSLv23 = PROTOCOL_TLS
69
+ except ImportError:
70
+ try:
71
+ from ssl import PROTOCOL_SSLv23 as PROTOCOL_TLS
72
+
73
+ PROTOCOL_SSLv23 = PROTOCOL_TLS
74
+ except ImportError:
75
+ PROTOCOL_SSLv23 = PROTOCOL_TLS = 2
76
+
77
+ try:
78
+ from ssl import PROTOCOL_TLS_CLIENT
79
+ except ImportError:
80
+ PROTOCOL_TLS_CLIENT = PROTOCOL_TLS
81
+
82
+
83
+ try:
84
+ from ssl import OP_NO_COMPRESSION, OP_NO_SSLv2, OP_NO_SSLv3
85
+ except ImportError:
86
+ OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000
87
+ OP_NO_COMPRESSION = 0x20000
88
+
89
+
90
+ try: # OP_NO_TICKET was added in Python 3.6
91
+ from ssl import OP_NO_TICKET
92
+ except ImportError:
93
+ OP_NO_TICKET = 0x4000
94
+
95
+
96
+ # A secure default.
97
+ # Sources for more information on TLS ciphers:
98
+ #
99
+ # - https://wiki.mozilla.org/Security/Server_Side_TLS
100
+ # - https://www.ssllabs.com/projects/best-practices/index.html
101
+ # - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
102
+ #
103
+ # The general intent is:
104
+ # - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE),
105
+ # - prefer ECDHE over DHE for better performance,
106
+ # - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and
107
+ # security,
108
+ # - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common,
109
+ # - disable NULL authentication, MD5 MACs, DSS, and other
110
+ # insecure ciphers for security reasons.
111
+ # - NOTE: TLS 1.3 cipher suites are managed through a different interface
112
+ # not exposed by CPython (yet!) and are enabled by default if they're available.
113
+ DEFAULT_CIPHERS = ":".join(
114
+ [
115
+ "ECDHE+AESGCM",
116
+ "ECDHE+CHACHA20",
117
+ "DHE+AESGCM",
118
+ "DHE+CHACHA20",
119
+ "ECDH+AESGCM",
120
+ "DH+AESGCM",
121
+ "ECDH+AES",
122
+ "DH+AES",
123
+ "RSA+AESGCM",
124
+ "RSA+AES",
125
+ "!aNULL",
126
+ "!eNULL",
127
+ "!MD5",
128
+ "!DSS",
129
+ ]
130
+ )
131
+
132
+ try:
133
+ from ssl import SSLContext # Modern SSL?
134
+ except ImportError:
135
+
136
+ class SSLContext(object): # Platform-specific: Python 2
137
+ def __init__(self, protocol_version):
138
+ self.protocol = protocol_version
139
+ # Use default values from a real SSLContext
140
+ self.check_hostname = False
141
+ self.verify_mode = ssl.CERT_NONE
142
+ self.ca_certs = None
143
+ self.options = 0
144
+ self.certfile = None
145
+ self.keyfile = None
146
+ self.ciphers = None
147
+
148
+ def load_cert_chain(self, certfile, keyfile):
149
+ self.certfile = certfile
150
+ self.keyfile = keyfile
151
+
152
+ def load_verify_locations(self, cafile=None, capath=None, cadata=None):
153
+ self.ca_certs = cafile
154
+
155
+ if capath is not None:
156
+ raise SSLError("CA directories not supported in older Pythons")
157
+
158
+ if cadata is not None:
159
+ raise SSLError("CA data not supported in older Pythons")
160
+
161
+ def set_ciphers(self, cipher_suite):
162
+ self.ciphers = cipher_suite
163
+
164
+ def wrap_socket(self, socket, server_hostname=None, server_side=False):
165
+ warnings.warn(
166
+ "A true SSLContext object is not available. This prevents "
167
+ "urllib3 from configuring SSL appropriately and may cause "
168
+ "certain SSL connections to fail. You can upgrade to a newer "
169
+ "version of Python to solve this. For more information, see "
170
+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
171
+ "#ssl-warnings",
172
+ InsecurePlatformWarning,
173
+ )
174
+ kwargs = {
175
+ "keyfile": self.keyfile,
176
+ "certfile": self.certfile,
177
+ "ca_certs": self.ca_certs,
178
+ "cert_reqs": self.verify_mode,
179
+ "ssl_version": self.protocol,
180
+ "server_side": server_side,
181
+ }
182
+ return wrap_socket(socket, ciphers=self.ciphers, **kwargs)
183
+
184
+
185
+ def assert_fingerprint(cert, fingerprint):
186
+ """
187
+ Checks if given fingerprint matches the supplied certificate.
188
+
189
+ :param cert:
190
+ Certificate as bytes object.
191
+ :param fingerprint:
192
+ Fingerprint as string of hexdigits, can be interspersed by colons.
193
+ """
194
+
195
+ fingerprint = fingerprint.replace(":", "").lower()
196
+ digest_length = len(fingerprint)
197
+ if digest_length not in HASHFUNC_MAP:
198
+ raise SSLError("Fingerprint of invalid length: {0}".format(fingerprint))
199
+ hashfunc = HASHFUNC_MAP.get(digest_length)
200
+ if hashfunc is None:
201
+ raise SSLError(
202
+ "Hash function implementation unavailable for fingerprint length: {0}".format(
203
+ digest_length
204
+ )
205
+ )
206
+
207
+ # We need encode() here for py32; works on py2 and p33.
208
+ fingerprint_bytes = unhexlify(fingerprint.encode())
209
+
210
+ cert_digest = hashfunc(cert).digest()
211
+
212
+ if not _const_compare_digest(cert_digest, fingerprint_bytes):
213
+ raise SSLError(
214
+ 'Fingerprints did not match. Expected "{0}", got "{1}".'.format(
215
+ fingerprint, hexlify(cert_digest)
216
+ )
217
+ )
218
+
219
+
220
+ def resolve_cert_reqs(candidate):
221
+ """
222
+ Resolves the argument to a numeric constant, which can be passed to
223
+ the wrap_socket function/method from the ssl module.
224
+ Defaults to :data:`ssl.CERT_REQUIRED`.
225
+ If given a string it is assumed to be the name of the constant in the
226
+ :mod:`ssl` module or its abbreviation.
227
+ (So you can specify `REQUIRED` instead of `CERT_REQUIRED`.
228
+ If it's neither `None` nor a string we assume it is already the numeric
229
+ constant which can directly be passed to wrap_socket.
230
+ """
231
+ if candidate is None:
232
+ return CERT_REQUIRED
233
+
234
+ if isinstance(candidate, str):
235
+ res = getattr(ssl, candidate, None)
236
+ if res is None:
237
+ res = getattr(ssl, "CERT_" + candidate)
238
+ return res
239
+
240
+ return candidate
241
+
242
+
243
+ def resolve_ssl_version(candidate):
244
+ """
245
+ like resolve_cert_reqs
246
+ """
247
+ if candidate is None:
248
+ return PROTOCOL_TLS
249
+
250
+ if isinstance(candidate, str):
251
+ res = getattr(ssl, candidate, None)
252
+ if res is None:
253
+ res = getattr(ssl, "PROTOCOL_" + candidate)
254
+ return res
255
+
256
+ return candidate
257
+
258
+
259
+ def create_urllib3_context(
260
+ ssl_version=None, cert_reqs=None, options=None, ciphers=None
261
+ ):
262
+ """All arguments have the same meaning as ``ssl_wrap_socket``.
263
+
264
+ By default, this function does a lot of the same work that
265
+ ``ssl.create_default_context`` does on Python 3.4+. It:
266
+
267
+ - Disables SSLv2, SSLv3, and compression
268
+ - Sets a restricted set of server ciphers
269
+
270
+ If you wish to enable SSLv3, you can do::
271
+
272
+ from pip._vendor.urllib3.util import ssl_
273
+ context = ssl_.create_urllib3_context()
274
+ context.options &= ~ssl_.OP_NO_SSLv3
275
+
276
+ You can do the same to enable compression (substituting ``COMPRESSION``
277
+ for ``SSLv3`` in the last line above).
278
+
279
+ :param ssl_version:
280
+ The desired protocol version to use. This will default to
281
+ PROTOCOL_SSLv23 which will negotiate the highest protocol that both
282
+ the server and your installation of OpenSSL support.
283
+ :param cert_reqs:
284
+ Whether to require the certificate verification. This defaults to
285
+ ``ssl.CERT_REQUIRED``.
286
+ :param options:
287
+ Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``,
288
+ ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``, and ``ssl.OP_NO_TICKET``.
289
+ :param ciphers:
290
+ Which cipher suites to allow the server to select.
291
+ :returns:
292
+ Constructed SSLContext object with specified options
293
+ :rtype: SSLContext
294
+ """
295
+ # PROTOCOL_TLS is deprecated in Python 3.10
296
+ if not ssl_version or ssl_version == PROTOCOL_TLS:
297
+ ssl_version = PROTOCOL_TLS_CLIENT
298
+
299
+ context = SSLContext(ssl_version)
300
+
301
+ context.set_ciphers(ciphers or DEFAULT_CIPHERS)
302
+
303
+ # Setting the default here, as we may have no ssl module on import
304
+ cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs
305
+
306
+ if options is None:
307
+ options = 0
308
+ # SSLv2 is easily broken and is considered harmful and dangerous
309
+ options |= OP_NO_SSLv2
310
+ # SSLv3 has several problems and is now dangerous
311
+ options |= OP_NO_SSLv3
312
+ # Disable compression to prevent CRIME attacks for OpenSSL 1.0+
313
+ # (issue #309)
314
+ options |= OP_NO_COMPRESSION
315
+ # TLSv1.2 only. Unless set explicitly, do not request tickets.
316
+ # This may save some bandwidth on wire, and although the ticket is encrypted,
317
+ # there is a risk associated with it being on wire,
318
+ # if the server is not rotating its ticketing keys properly.
319
+ options |= OP_NO_TICKET
320
+
321
+ context.options |= options
322
+
323
+ # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is
324
+ # necessary for conditional client cert authentication with TLS 1.3.
325
+ # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older
326
+ # versions of Python. We only enable on Python 3.7.4+ or if certificate
327
+ # verification is enabled to work around Python issue #37428
328
+ # See: https://bugs.python.org/issue37428
329
+ if (cert_reqs == ssl.CERT_REQUIRED or sys.version_info >= (3, 7, 4)) and getattr(
330
+ context, "post_handshake_auth", None
331
+ ) is not None:
332
+ context.post_handshake_auth = True
333
+
334
+ def disable_check_hostname():
335
+ if (
336
+ getattr(context, "check_hostname", None) is not None
337
+ ): # Platform-specific: Python 3.2
338
+ # We do our own verification, including fingerprints and alternative
339
+ # hostnames. So disable it here
340
+ context.check_hostname = False
341
+
342
+ # The order of the below lines setting verify_mode and check_hostname
343
+ # matter due to safe-guards SSLContext has to prevent an SSLContext with
344
+ # check_hostname=True, verify_mode=NONE/OPTIONAL. This is made even more
345
+ # complex because we don't know whether PROTOCOL_TLS_CLIENT will be used
346
+ # or not so we don't know the initial state of the freshly created SSLContext.
347
+ if cert_reqs == ssl.CERT_REQUIRED:
348
+ context.verify_mode = cert_reqs
349
+ disable_check_hostname()
350
+ else:
351
+ disable_check_hostname()
352
+ context.verify_mode = cert_reqs
353
+
354
+ # Enable logging of TLS session keys via defacto standard environment variable
355
+ # 'SSLKEYLOGFILE', if the feature is available (Python 3.8+). Skip empty values.
356
+ if hasattr(context, "keylog_filename"):
357
+ sslkeylogfile = os.environ.get("SSLKEYLOGFILE")
358
+ if sslkeylogfile:
359
+ context.keylog_filename = sslkeylogfile
360
+
361
+ return context
362
+
363
+
364
+ def ssl_wrap_socket(
365
+ sock,
366
+ keyfile=None,
367
+ certfile=None,
368
+ cert_reqs=None,
369
+ ca_certs=None,
370
+ server_hostname=None,
371
+ ssl_version=None,
372
+ ciphers=None,
373
+ ssl_context=None,
374
+ ca_cert_dir=None,
375
+ key_password=None,
376
+ ca_cert_data=None,
377
+ tls_in_tls=False,
378
+ ):
379
+ """
380
+ All arguments except for server_hostname, ssl_context, and ca_cert_dir have
381
+ the same meaning as they do when using :func:`ssl.wrap_socket`.
382
+
383
+ :param server_hostname:
384
+ When SNI is supported, the expected hostname of the certificate
385
+ :param ssl_context:
386
+ A pre-made :class:`SSLContext` object. If none is provided, one will
387
+ be created using :func:`create_urllib3_context`.
388
+ :param ciphers:
389
+ A string of ciphers we wish the client to support.
390
+ :param ca_cert_dir:
391
+ A directory containing CA certificates in multiple separate files, as
392
+ supported by OpenSSL's -CApath flag or the capath argument to
393
+ SSLContext.load_verify_locations().
394
+ :param key_password:
395
+ Optional password if the keyfile is encrypted.
396
+ :param ca_cert_data:
397
+ Optional string containing CA certificates in PEM format suitable for
398
+ passing as the cadata parameter to SSLContext.load_verify_locations()
399
+ :param tls_in_tls:
400
+ Use SSLTransport to wrap the existing socket.
401
+ """
402
+ context = ssl_context
403
+ if context is None:
404
+ # Note: This branch of code and all the variables in it are no longer
405
+ # used by urllib3 itself. We should consider deprecating and removing
406
+ # this code.
407
+ context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers)
408
+
409
+ if ca_certs or ca_cert_dir or ca_cert_data:
410
+ try:
411
+ context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
412
+ except (IOError, OSError) as e:
413
+ raise SSLError(e)
414
+
415
+ elif ssl_context is None and hasattr(context, "load_default_certs"):
416
+ # try to load OS default certs; works well on Windows (require Python3.4+)
417
+ context.load_default_certs()
418
+
419
+ # Attempt to detect if we get the goofy behavior of the
420
+ # keyfile being encrypted and OpenSSL asking for the
421
+ # passphrase via the terminal and instead error out.
422
+ if keyfile and key_password is None and _is_key_file_encrypted(keyfile):
423
+ raise SSLError("Client private key is encrypted, password is required")
424
+
425
+ if certfile:
426
+ if key_password is None:
427
+ context.load_cert_chain(certfile, keyfile)
428
+ else:
429
+ context.load_cert_chain(certfile, keyfile, key_password)
430
+
431
+ try:
432
+ if hasattr(context, "set_alpn_protocols"):
433
+ context.set_alpn_protocols(ALPN_PROTOCOLS)
434
+ except NotImplementedError: # Defensive: in CI, we always have set_alpn_protocols
435
+ pass
436
+
437
+ # If we detect server_hostname is an IP address then the SNI
438
+ # extension should not be used according to RFC3546 Section 3.1
439
+ use_sni_hostname = server_hostname and not is_ipaddress(server_hostname)
440
+ # SecureTransport uses server_hostname in certificate verification.
441
+ send_sni = (use_sni_hostname and HAS_SNI) or (
442
+ IS_SECURETRANSPORT and server_hostname
443
+ )
444
+ # Do not warn the user if server_hostname is an invalid SNI hostname.
445
+ if not HAS_SNI and use_sni_hostname:
446
+ warnings.warn(
447
+ "An HTTPS request has been made, but the SNI (Server Name "
448
+ "Indication) extension to TLS is not available on this platform. "
449
+ "This may cause the server to present an incorrect TLS "
450
+ "certificate, which can cause validation failures. You can upgrade to "
451
+ "a newer version of Python to solve this. For more information, see "
452
+ "https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html"
453
+ "#ssl-warnings",
454
+ SNIMissingWarning,
455
+ )
456
+
457
+ if send_sni:
458
+ ssl_sock = _ssl_wrap_socket_impl(
459
+ sock, context, tls_in_tls, server_hostname=server_hostname
460
+ )
461
+ else:
462
+ ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
463
+ return ssl_sock
464
+
465
+
466
+ def is_ipaddress(hostname):
467
+ """Detects whether the hostname given is an IPv4 or IPv6 address.
468
+ Also detects IPv6 addresses with Zone IDs.
469
+
470
+ :param str hostname: Hostname to examine.
471
+ :return: True if the hostname is an IP address, False otherwise.
472
+ """
473
+ if not six.PY2 and isinstance(hostname, bytes):
474
+ # IDN A-label bytes are ASCII compatible.
475
+ hostname = hostname.decode("ascii")
476
+ return bool(IPV4_RE.match(hostname) or BRACELESS_IPV6_ADDRZ_RE.match(hostname))
477
+
478
+
479
+ def _is_key_file_encrypted(key_file):
480
+ """Detects if a key file is encrypted or not."""
481
+ with open(key_file, "r") as f:
482
+ for line in f:
483
+ # Look for Proc-Type: 4,ENCRYPTED
484
+ if "ENCRYPTED" in line:
485
+ return True
486
+
487
+ return False
488
+
489
+
490
+ def _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname=None):
491
+ if tls_in_tls:
492
+ if not SSLTransport:
493
+ # Import error, ssl is not available.
494
+ raise ProxySchemeUnsupported(
495
+ "TLS in TLS requires support for the 'ssl' module"
496
+ )
497
+
498
+ SSLTransport._validate_ssl_context_for_tls_in_tls(ssl_context)
499
+ return SSLTransport(sock, ssl_context, server_hostname)
500
+
501
+ if server_hostname:
502
+ return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
503
+ else:
504
+ return ssl_context.wrap_socket(sock)
.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """The match_hostname() function from Python 3.3.3, essential when using SSL."""
2
+
3
+ # Note: This file is under the PSF license as the code comes from the python
4
+ # stdlib. http://docs.python.org/3/license.html
5
+
6
+ import re
7
+ import sys
8
+
9
+ # ipaddress has been backported to 2.6+ in pypi. If it is installed on the
10
+ # system, use it to handle IPAddress ServerAltnames (this was added in
11
+ # python-3.5) otherwise only do DNS matching. This allows
12
+ # util.ssl_match_hostname to continue to be used in Python 2.7.
13
+ try:
14
+ import ipaddress
15
+ except ImportError:
16
+ ipaddress = None
17
+
18
+ __version__ = "3.5.0.1"
19
+
20
+
21
+ class CertificateError(ValueError):
22
+ pass
23
+
24
+
25
+ def _dnsname_match(dn, hostname, max_wildcards=1):
26
+ """Matching according to RFC 6125, section 6.4.3
27
+
28
+ http://tools.ietf.org/html/rfc6125#section-6.4.3
29
+ """
30
+ pats = []
31
+ if not dn:
32
+ return False
33
+
34
+ # Ported from python3-syntax:
35
+ # leftmost, *remainder = dn.split(r'.')
36
+ parts = dn.split(r".")
37
+ leftmost = parts[0]
38
+ remainder = parts[1:]
39
+
40
+ wildcards = leftmost.count("*")
41
+ if wildcards > max_wildcards:
42
+ # Issue #17980: avoid denials of service by refusing more
43
+ # than one wildcard per fragment. A survey of established
44
+ # policy among SSL implementations showed it to be a
45
+ # reasonable choice.
46
+ raise CertificateError(
47
+ "too many wildcards in certificate DNS name: " + repr(dn)
48
+ )
49
+
50
+ # speed up common case w/o wildcards
51
+ if not wildcards:
52
+ return dn.lower() == hostname.lower()
53
+
54
+ # RFC 6125, section 6.4.3, subitem 1.
55
+ # The client SHOULD NOT attempt to match a presented identifier in which
56
+ # the wildcard character comprises a label other than the left-most label.
57
+ if leftmost == "*":
58
+ # When '*' is a fragment by itself, it matches a non-empty dotless
59
+ # fragment.
60
+ pats.append("[^.]+")
61
+ elif leftmost.startswith("xn--") or hostname.startswith("xn--"):
62
+ # RFC 6125, section 6.4.3, subitem 3.
63
+ # The client SHOULD NOT attempt to match a presented identifier
64
+ # where the wildcard character is embedded within an A-label or
65
+ # U-label of an internationalized domain name.
66
+ pats.append(re.escape(leftmost))
67
+ else:
68
+ # Otherwise, '*' matches any dotless string, e.g. www*
69
+ pats.append(re.escape(leftmost).replace(r"\*", "[^.]*"))
70
+
71
+ # add the remaining fragments, ignore any wildcards
72
+ for frag in remainder:
73
+ pats.append(re.escape(frag))
74
+
75
+ pat = re.compile(r"\A" + r"\.".join(pats) + r"\Z", re.IGNORECASE)
76
+ return pat.match(hostname)
77
+
78
+
79
+ def _to_unicode(obj):
80
+ if isinstance(obj, str) and sys.version_info < (3,):
81
+ # ignored flake8 # F821 to support python 2.7 function
82
+ obj = unicode(obj, encoding="ascii", errors="strict") # noqa: F821
83
+ return obj
84
+
85
+
86
+ def _ipaddress_match(ipname, host_ip):
87
+ """Exact matching of IP addresses.
88
+
89
+ RFC 6125 explicitly doesn't define an algorithm for this
90
+ (section 1.7.2 - "Out of Scope").
91
+ """
92
+ # OpenSSL may add a trailing newline to a subjectAltName's IP address
93
+ # Divergence from upstream: ipaddress can't handle byte str
94
+ ip = ipaddress.ip_address(_to_unicode(ipname).rstrip())
95
+ return ip == host_ip
96
+
97
+
98
+ def match_hostname(cert, hostname):
99
+ """Verify that *cert* (in decoded format as returned by
100
+ SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125
101
+ rules are followed, but IP addresses are not accepted for *hostname*.
102
+
103
+ CertificateError is raised on failure. On success, the function
104
+ returns nothing.
105
+ """
106
+ if not cert:
107
+ raise ValueError(
108
+ "empty or no certificate, match_hostname needs a "
109
+ "SSL socket or SSL context with either "
110
+ "CERT_OPTIONAL or CERT_REQUIRED"
111
+ )
112
+ try:
113
+ # Divergence from upstream: ipaddress can't handle byte str
114
+ host_ip = ipaddress.ip_address(_to_unicode(hostname))
115
+ except (UnicodeError, ValueError):
116
+ # ValueError: Not an IP address (common case)
117
+ # UnicodeError: Divergence from upstream: Have to deal with ipaddress not taking
118
+ # byte strings. addresses should be all ascii, so we consider it not
119
+ # an ipaddress in this case
120
+ host_ip = None
121
+ except AttributeError:
122
+ # Divergence from upstream: Make ipaddress library optional
123
+ if ipaddress is None:
124
+ host_ip = None
125
+ else: # Defensive
126
+ raise
127
+ dnsnames = []
128
+ san = cert.get("subjectAltName", ())
129
+ for key, value in san:
130
+ if key == "DNS":
131
+ if host_ip is None and _dnsname_match(value, hostname):
132
+ return
133
+ dnsnames.append(value)
134
+ elif key == "IP Address":
135
+ if host_ip is not None and _ipaddress_match(value, host_ip):
136
+ return
137
+ dnsnames.append(value)
138
+ if not dnsnames:
139
+ # The subject is only checked when there is no dNSName entry
140
+ # in subjectAltName
141
+ for sub in cert.get("subject", ()):
142
+ for key, value in sub:
143
+ # XXX according to RFC 2818, the most specific Common Name
144
+ # must be used.
145
+ if key == "commonName":
146
+ if _dnsname_match(value, hostname):
147
+ return
148
+ dnsnames.append(value)
149
+ if len(dnsnames) > 1:
150
+ raise CertificateError(
151
+ "hostname %r "
152
+ "doesn't match either of %s" % (hostname, ", ".join(map(repr, dnsnames)))
153
+ )
154
+ elif len(dnsnames) == 1:
155
+ raise CertificateError("hostname %r doesn't match %r" % (hostname, dnsnames[0]))
156
+ else:
157
+ raise CertificateError(
158
+ "no appropriate commonName or subjectAltName fields were found"
159
+ )
.venv/Lib/site-packages/pip/_vendor/urllib3/util/ssltransport.py ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import io
2
+ import socket
3
+ import ssl
4
+
5
+ from ..exceptions import ProxySchemeUnsupported
6
+ from ..packages import six
7
+
8
+ SSL_BLOCKSIZE = 16384
9
+
10
+
11
+ class SSLTransport:
12
+ """
13
+ The SSLTransport wraps an existing socket and establishes an SSL connection.
14
+
15
+ Contrary to Python's implementation of SSLSocket, it allows you to chain
16
+ multiple TLS connections together. It's particularly useful if you need to
17
+ implement TLS within TLS.
18
+
19
+ The class supports most of the socket API operations.
20
+ """
21
+
22
+ @staticmethod
23
+ def _validate_ssl_context_for_tls_in_tls(ssl_context):
24
+ """
25
+ Raises a ProxySchemeUnsupported if the provided ssl_context can't be used
26
+ for TLS in TLS.
27
+
28
+ The only requirement is that the ssl_context provides the 'wrap_bio'
29
+ methods.
30
+ """
31
+
32
+ if not hasattr(ssl_context, "wrap_bio"):
33
+ if six.PY2:
34
+ raise ProxySchemeUnsupported(
35
+ "TLS in TLS requires SSLContext.wrap_bio() which isn't "
36
+ "supported on Python 2"
37
+ )
38
+ else:
39
+ raise ProxySchemeUnsupported(
40
+ "TLS in TLS requires SSLContext.wrap_bio() which isn't "
41
+ "available on non-native SSLContext"
42
+ )
43
+
44
+ def __init__(
45
+ self, socket, ssl_context, server_hostname=None, suppress_ragged_eofs=True
46
+ ):
47
+ """
48
+ Create an SSLTransport around socket using the provided ssl_context.
49
+ """
50
+ self.incoming = ssl.MemoryBIO()
51
+ self.outgoing = ssl.MemoryBIO()
52
+
53
+ self.suppress_ragged_eofs = suppress_ragged_eofs
54
+ self.socket = socket
55
+
56
+ self.sslobj = ssl_context.wrap_bio(
57
+ self.incoming, self.outgoing, server_hostname=server_hostname
58
+ )
59
+
60
+ # Perform initial handshake.
61
+ self._ssl_io_loop(self.sslobj.do_handshake)
62
+
63
+ def __enter__(self):
64
+ return self
65
+
66
+ def __exit__(self, *_):
67
+ self.close()
68
+
69
+ def fileno(self):
70
+ return self.socket.fileno()
71
+
72
+ def read(self, len=1024, buffer=None):
73
+ return self._wrap_ssl_read(len, buffer)
74
+
75
+ def recv(self, len=1024, flags=0):
76
+ if flags != 0:
77
+ raise ValueError("non-zero flags not allowed in calls to recv")
78
+ return self._wrap_ssl_read(len)
79
+
80
+ def recv_into(self, buffer, nbytes=None, flags=0):
81
+ if flags != 0:
82
+ raise ValueError("non-zero flags not allowed in calls to recv_into")
83
+ if buffer and (nbytes is None):
84
+ nbytes = len(buffer)
85
+ elif nbytes is None:
86
+ nbytes = 1024
87
+ return self.read(nbytes, buffer)
88
+
89
+ def sendall(self, data, flags=0):
90
+ if flags != 0:
91
+ raise ValueError("non-zero flags not allowed in calls to sendall")
92
+ count = 0
93
+ with memoryview(data) as view, view.cast("B") as byte_view:
94
+ amount = len(byte_view)
95
+ while count < amount:
96
+ v = self.send(byte_view[count:])
97
+ count += v
98
+
99
+ def send(self, data, flags=0):
100
+ if flags != 0:
101
+ raise ValueError("non-zero flags not allowed in calls to send")
102
+ response = self._ssl_io_loop(self.sslobj.write, data)
103
+ return response
104
+
105
+ def makefile(
106
+ self, mode="r", buffering=None, encoding=None, errors=None, newline=None
107
+ ):
108
+ """
109
+ Python's httpclient uses makefile and buffered io when reading HTTP
110
+ messages and we need to support it.
111
+
112
+ This is unfortunately a copy and paste of socket.py makefile with small
113
+ changes to point to the socket directly.
114
+ """
115
+ if not set(mode) <= {"r", "w", "b"}:
116
+ raise ValueError("invalid mode %r (only r, w, b allowed)" % (mode,))
117
+
118
+ writing = "w" in mode
119
+ reading = "r" in mode or not writing
120
+ assert reading or writing
121
+ binary = "b" in mode
122
+ rawmode = ""
123
+ if reading:
124
+ rawmode += "r"
125
+ if writing:
126
+ rawmode += "w"
127
+ raw = socket.SocketIO(self, rawmode)
128
+ self.socket._io_refs += 1
129
+ if buffering is None:
130
+ buffering = -1
131
+ if buffering < 0:
132
+ buffering = io.DEFAULT_BUFFER_SIZE
133
+ if buffering == 0:
134
+ if not binary:
135
+ raise ValueError("unbuffered streams must be binary")
136
+ return raw
137
+ if reading and writing:
138
+ buffer = io.BufferedRWPair(raw, raw, buffering)
139
+ elif reading:
140
+ buffer = io.BufferedReader(raw, buffering)
141
+ else:
142
+ assert writing
143
+ buffer = io.BufferedWriter(raw, buffering)
144
+ if binary:
145
+ return buffer
146
+ text = io.TextIOWrapper(buffer, encoding, errors, newline)
147
+ text.mode = mode
148
+ return text
149
+
150
+ def unwrap(self):
151
+ self._ssl_io_loop(self.sslobj.unwrap)
152
+
153
+ def close(self):
154
+ self.socket.close()
155
+
156
+ def getpeercert(self, binary_form=False):
157
+ return self.sslobj.getpeercert(binary_form)
158
+
159
+ def version(self):
160
+ return self.sslobj.version()
161
+
162
+ def cipher(self):
163
+ return self.sslobj.cipher()
164
+
165
+ def selected_alpn_protocol(self):
166
+ return self.sslobj.selected_alpn_protocol()
167
+
168
+ def selected_npn_protocol(self):
169
+ return self.sslobj.selected_npn_protocol()
170
+
171
+ def shared_ciphers(self):
172
+ return self.sslobj.shared_ciphers()
173
+
174
+ def compression(self):
175
+ return self.sslobj.compression()
176
+
177
+ def settimeout(self, value):
178
+ self.socket.settimeout(value)
179
+
180
+ def gettimeout(self):
181
+ return self.socket.gettimeout()
182
+
183
+ def _decref_socketios(self):
184
+ self.socket._decref_socketios()
185
+
186
+ def _wrap_ssl_read(self, len, buffer=None):
187
+ try:
188
+ return self._ssl_io_loop(self.sslobj.read, len, buffer)
189
+ except ssl.SSLError as e:
190
+ if e.errno == ssl.SSL_ERROR_EOF and self.suppress_ragged_eofs:
191
+ return 0 # eof, return 0.
192
+ else:
193
+ raise
194
+
195
+ def _ssl_io_loop(self, func, *args):
196
+ """Performs an I/O loop between incoming/outgoing and the socket."""
197
+ should_loop = True
198
+ ret = None
199
+
200
+ while should_loop:
201
+ errno = None
202
+ try:
203
+ ret = func(*args)
204
+ except ssl.SSLError as e:
205
+ if e.errno not in (ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE):
206
+ # WANT_READ, and WANT_WRITE are expected, others are not.
207
+ raise e
208
+ errno = e.errno
209
+
210
+ buf = self.outgoing.read()
211
+ self.socket.sendall(buf)
212
+
213
+ if errno is None:
214
+ should_loop = False
215
+ elif errno == ssl.SSL_ERROR_WANT_READ:
216
+ buf = self.socket.recv(SSL_BLOCKSIZE)
217
+ if buf:
218
+ self.incoming.write(buf)
219
+ else:
220
+ self.incoming.write_eof()
221
+ return ret
.venv/Lib/site-packages/pip/_vendor/urllib3/util/timeout.py ADDED
@@ -0,0 +1,271 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ import time
4
+
5
+ # The default socket timeout, used by httplib to indicate that no timeout was; specified by the user
6
+ from socket import _GLOBAL_DEFAULT_TIMEOUT, getdefaulttimeout
7
+
8
+ from ..exceptions import TimeoutStateError
9
+
10
+ # A sentinel value to indicate that no timeout was specified by the user in
11
+ # urllib3
12
+ _Default = object()
13
+
14
+
15
+ # Use time.monotonic if available.
16
+ current_time = getattr(time, "monotonic", time.time)
17
+
18
+
19
+ class Timeout(object):
20
+ """Timeout configuration.
21
+
22
+ Timeouts can be defined as a default for a pool:
23
+
24
+ .. code-block:: python
25
+
26
+ timeout = Timeout(connect=2.0, read=7.0)
27
+ http = PoolManager(timeout=timeout)
28
+ response = http.request('GET', 'http://example.com/')
29
+
30
+ Or per-request (which overrides the default for the pool):
31
+
32
+ .. code-block:: python
33
+
34
+ response = http.request('GET', 'http://example.com/', timeout=Timeout(10))
35
+
36
+ Timeouts can be disabled by setting all the parameters to ``None``:
37
+
38
+ .. code-block:: python
39
+
40
+ no_timeout = Timeout(connect=None, read=None)
41
+ response = http.request('GET', 'http://example.com/, timeout=no_timeout)
42
+
43
+
44
+ :param total:
45
+ This combines the connect and read timeouts into one; the read timeout
46
+ will be set to the time leftover from the connect attempt. In the
47
+ event that both a connect timeout and a total are specified, or a read
48
+ timeout and a total are specified, the shorter timeout will be applied.
49
+
50
+ Defaults to None.
51
+
52
+ :type total: int, float, or None
53
+
54
+ :param connect:
55
+ The maximum amount of time (in seconds) to wait for a connection
56
+ attempt to a server to succeed. Omitting the parameter will default the
57
+ connect timeout to the system default, probably `the global default
58
+ timeout in socket.py
59
+ <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
60
+ None will set an infinite timeout for connection attempts.
61
+
62
+ :type connect: int, float, or None
63
+
64
+ :param read:
65
+ The maximum amount of time (in seconds) to wait between consecutive
66
+ read operations for a response from the server. Omitting the parameter
67
+ will default the read timeout to the system default, probably `the
68
+ global default timeout in socket.py
69
+ <http://hg.python.org/cpython/file/603b4d593758/Lib/socket.py#l535>`_.
70
+ None will set an infinite timeout.
71
+
72
+ :type read: int, float, or None
73
+
74
+ .. note::
75
+
76
+ Many factors can affect the total amount of time for urllib3 to return
77
+ an HTTP response.
78
+
79
+ For example, Python's DNS resolver does not obey the timeout specified
80
+ on the socket. Other factors that can affect total request time include
81
+ high CPU load, high swap, the program running at a low priority level,
82
+ or other behaviors.
83
+
84
+ In addition, the read and total timeouts only measure the time between
85
+ read operations on the socket connecting the client and the server,
86
+ not the total amount of time for the request to return a complete
87
+ response. For most requests, the timeout is raised because the server
88
+ has not sent the first byte in the specified time. This is not always
89
+ the case; if a server streams one byte every fifteen seconds, a timeout
90
+ of 20 seconds will not trigger, even though the request will take
91
+ several minutes to complete.
92
+
93
+ If your goal is to cut off any request after a set amount of wall clock
94
+ time, consider having a second "watcher" thread to cut off a slow
95
+ request.
96
+ """
97
+
98
+ #: A sentinel object representing the default timeout value
99
+ DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT
100
+
101
+ def __init__(self, total=None, connect=_Default, read=_Default):
102
+ self._connect = self._validate_timeout(connect, "connect")
103
+ self._read = self._validate_timeout(read, "read")
104
+ self.total = self._validate_timeout(total, "total")
105
+ self._start_connect = None
106
+
107
+ def __repr__(self):
108
+ return "%s(connect=%r, read=%r, total=%r)" % (
109
+ type(self).__name__,
110
+ self._connect,
111
+ self._read,
112
+ self.total,
113
+ )
114
+
115
+ # __str__ provided for backwards compatibility
116
+ __str__ = __repr__
117
+
118
+ @classmethod
119
+ def resolve_default_timeout(cls, timeout):
120
+ return getdefaulttimeout() if timeout is cls.DEFAULT_TIMEOUT else timeout
121
+
122
+ @classmethod
123
+ def _validate_timeout(cls, value, name):
124
+ """Check that a timeout attribute is valid.
125
+
126
+ :param value: The timeout value to validate
127
+ :param name: The name of the timeout attribute to validate. This is
128
+ used to specify in error messages.
129
+ :return: The validated and casted version of the given value.
130
+ :raises ValueError: If it is a numeric value less than or equal to
131
+ zero, or the type is not an integer, float, or None.
132
+ """
133
+ if value is _Default:
134
+ return cls.DEFAULT_TIMEOUT
135
+
136
+ if value is None or value is cls.DEFAULT_TIMEOUT:
137
+ return value
138
+
139
+ if isinstance(value, bool):
140
+ raise ValueError(
141
+ "Timeout cannot be a boolean value. It must "
142
+ "be an int, float or None."
143
+ )
144
+ try:
145
+ float(value)
146
+ except (TypeError, ValueError):
147
+ raise ValueError(
148
+ "Timeout value %s was %s, but it must be an "
149
+ "int, float or None." % (name, value)
150
+ )
151
+
152
+ try:
153
+ if value <= 0:
154
+ raise ValueError(
155
+ "Attempted to set %s timeout to %s, but the "
156
+ "timeout cannot be set to a value less "
157
+ "than or equal to 0." % (name, value)
158
+ )
159
+ except TypeError:
160
+ # Python 3
161
+ raise ValueError(
162
+ "Timeout value %s was %s, but it must be an "
163
+ "int, float or None." % (name, value)
164
+ )
165
+
166
+ return value
167
+
168
+ @classmethod
169
+ def from_float(cls, timeout):
170
+ """Create a new Timeout from a legacy timeout value.
171
+
172
+ The timeout value used by httplib.py sets the same timeout on the
173
+ connect(), and recv() socket requests. This creates a :class:`Timeout`
174
+ object that sets the individual timeouts to the ``timeout`` value
175
+ passed to this function.
176
+
177
+ :param timeout: The legacy timeout value.
178
+ :type timeout: integer, float, sentinel default object, or None
179
+ :return: Timeout object
180
+ :rtype: :class:`Timeout`
181
+ """
182
+ return Timeout(read=timeout, connect=timeout)
183
+
184
+ def clone(self):
185
+ """Create a copy of the timeout object
186
+
187
+ Timeout properties are stored per-pool but each request needs a fresh
188
+ Timeout object to ensure each one has its own start/stop configured.
189
+
190
+ :return: a copy of the timeout object
191
+ :rtype: :class:`Timeout`
192
+ """
193
+ # We can't use copy.deepcopy because that will also create a new object
194
+ # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to
195
+ # detect the user default.
196
+ return Timeout(connect=self._connect, read=self._read, total=self.total)
197
+
198
+ def start_connect(self):
199
+ """Start the timeout clock, used during a connect() attempt
200
+
201
+ :raises urllib3.exceptions.TimeoutStateError: if you attempt
202
+ to start a timer that has been started already.
203
+ """
204
+ if self._start_connect is not None:
205
+ raise TimeoutStateError("Timeout timer has already been started.")
206
+ self._start_connect = current_time()
207
+ return self._start_connect
208
+
209
+ def get_connect_duration(self):
210
+ """Gets the time elapsed since the call to :meth:`start_connect`.
211
+
212
+ :return: Elapsed time in seconds.
213
+ :rtype: float
214
+ :raises urllib3.exceptions.TimeoutStateError: if you attempt
215
+ to get duration for a timer that hasn't been started.
216
+ """
217
+ if self._start_connect is None:
218
+ raise TimeoutStateError(
219
+ "Can't get connect duration for timer that has not started."
220
+ )
221
+ return current_time() - self._start_connect
222
+
223
+ @property
224
+ def connect_timeout(self):
225
+ """Get the value to use when setting a connection timeout.
226
+
227
+ This will be a positive float or integer, the value None
228
+ (never timeout), or the default system timeout.
229
+
230
+ :return: Connect timeout.
231
+ :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
232
+ """
233
+ if self.total is None:
234
+ return self._connect
235
+
236
+ if self._connect is None or self._connect is self.DEFAULT_TIMEOUT:
237
+ return self.total
238
+
239
+ return min(self._connect, self.total)
240
+
241
+ @property
242
+ def read_timeout(self):
243
+ """Get the value for the read timeout.
244
+
245
+ This assumes some time has elapsed in the connection timeout and
246
+ computes the read timeout appropriately.
247
+
248
+ If self.total is set, the read timeout is dependent on the amount of
249
+ time taken by the connect timeout. If the connection time has not been
250
+ established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be
251
+ raised.
252
+
253
+ :return: Value to use for the read timeout.
254
+ :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None
255
+ :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect`
256
+ has not yet been called on this object.
257
+ """
258
+ if (
259
+ self.total is not None
260
+ and self.total is not self.DEFAULT_TIMEOUT
261
+ and self._read is not None
262
+ and self._read is not self.DEFAULT_TIMEOUT
263
+ ):
264
+ # In case the connect timeout has not yet been established.
265
+ if self._start_connect is None:
266
+ return self._read
267
+ return max(0, min(self.total - self.get_connect_duration(), self._read))
268
+ elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT:
269
+ return max(0, self.total - self.get_connect_duration())
270
+ else:
271
+ return self._read
.venv/Lib/site-packages/pip/_vendor/urllib3/util/url.py ADDED
@@ -0,0 +1,435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import absolute_import
2
+
3
+ import re
4
+ from collections import namedtuple
5
+
6
+ from ..exceptions import LocationParseError
7
+ from ..packages import six
8
+
9
+ url_attrs = ["scheme", "auth", "host", "port", "path", "query", "fragment"]
10
+
11
+ # We only want to normalize urls with an HTTP(S) scheme.
12
+ # urllib3 infers URLs without a scheme (None) to be http.
13
+ NORMALIZABLE_SCHEMES = ("http", "https", None)
14
+
15
+ # Almost all of these patterns were derived from the
16
+ # 'rfc3986' module: https://github.com/python-hyper/rfc3986
17
+ PERCENT_RE = re.compile(r"%[a-fA-F0-9]{2}")
18
+ SCHEME_RE = re.compile(r"^(?:[a-zA-Z][a-zA-Z0-9+-]*:|/)")
19
+ URI_RE = re.compile(
20
+ r"^(?:([a-zA-Z][a-zA-Z0-9+.-]*):)?"
21
+ r"(?://([^\\/?#]*))?"
22
+ r"([^?#]*)"
23
+ r"(?:\?([^#]*))?"
24
+ r"(?:#(.*))?$",
25
+ re.UNICODE | re.DOTALL,
26
+ )
27
+
28
+ IPV4_PAT = r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}"
29
+ HEX_PAT = "[0-9A-Fa-f]{1,4}"
30
+ LS32_PAT = "(?:{hex}:{hex}|{ipv4})".format(hex=HEX_PAT, ipv4=IPV4_PAT)
31
+ _subs = {"hex": HEX_PAT, "ls32": LS32_PAT}
32
+ _variations = [
33
+ # 6( h16 ":" ) ls32
34
+ "(?:%(hex)s:){6}%(ls32)s",
35
+ # "::" 5( h16 ":" ) ls32
36
+ "::(?:%(hex)s:){5}%(ls32)s",
37
+ # [ h16 ] "::" 4( h16 ":" ) ls32
38
+ "(?:%(hex)s)?::(?:%(hex)s:){4}%(ls32)s",
39
+ # [ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32
40
+ "(?:(?:%(hex)s:)?%(hex)s)?::(?:%(hex)s:){3}%(ls32)s",
41
+ # [ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32
42
+ "(?:(?:%(hex)s:){0,2}%(hex)s)?::(?:%(hex)s:){2}%(ls32)s",
43
+ # [ *3( h16 ":" ) h16 ] "::" h16 ":" ls32
44
+ "(?:(?:%(hex)s:){0,3}%(hex)s)?::%(hex)s:%(ls32)s",
45
+ # [ *4( h16 ":" ) h16 ] "::" ls32
46
+ "(?:(?:%(hex)s:){0,4}%(hex)s)?::%(ls32)s",
47
+ # [ *5( h16 ":" ) h16 ] "::" h16
48
+ "(?:(?:%(hex)s:){0,5}%(hex)s)?::%(hex)s",
49
+ # [ *6( h16 ":" ) h16 ] "::"
50
+ "(?:(?:%(hex)s:){0,6}%(hex)s)?::",
51
+ ]
52
+
53
+ UNRESERVED_PAT = r"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._\-~"
54
+ IPV6_PAT = "(?:" + "|".join([x % _subs for x in _variations]) + ")"
55
+ ZONE_ID_PAT = "(?:%25|%)(?:[" + UNRESERVED_PAT + "]|%[a-fA-F0-9]{2})+"
56
+ IPV6_ADDRZ_PAT = r"\[" + IPV6_PAT + r"(?:" + ZONE_ID_PAT + r")?\]"
57
+ REG_NAME_PAT = r"(?:[^\[\]%:/?#]|%[a-fA-F0-9]{2})*"
58
+ TARGET_RE = re.compile(r"^(/[^?#]*)(?:\?([^#]*))?(?:#.*)?$")
59
+
60
+ IPV4_RE = re.compile("^" + IPV4_PAT + "$")
61
+ IPV6_RE = re.compile("^" + IPV6_PAT + "$")
62
+ IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT + "$")
63
+ BRACELESS_IPV6_ADDRZ_RE = re.compile("^" + IPV6_ADDRZ_PAT[2:-2] + "$")
64
+ ZONE_ID_RE = re.compile("(" + ZONE_ID_PAT + r")\]$")
65
+
66
+ _HOST_PORT_PAT = ("^(%s|%s|%s)(?::0*?(|0|[1-9][0-9]{0,4}))?$") % (
67
+ REG_NAME_PAT,
68
+ IPV4_PAT,
69
+ IPV6_ADDRZ_PAT,
70
+ )
71
+ _HOST_PORT_RE = re.compile(_HOST_PORT_PAT, re.UNICODE | re.DOTALL)
72
+
73
+ UNRESERVED_CHARS = set(
74
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-~"
75
+ )
76
+ SUB_DELIM_CHARS = set("!$&'()*+,;=")
77
+ USERINFO_CHARS = UNRESERVED_CHARS | SUB_DELIM_CHARS | {":"}
78
+ PATH_CHARS = USERINFO_CHARS | {"@", "/"}
79
+ QUERY_CHARS = FRAGMENT_CHARS = PATH_CHARS | {"?"}
80
+
81
+
82
+ class Url(namedtuple("Url", url_attrs)):
83
+ """
84
+ Data structure for representing an HTTP URL. Used as a return value for
85
+ :func:`parse_url`. Both the scheme and host are normalized as they are
86
+ both case-insensitive according to RFC 3986.
87
+ """
88
+
89
+ __slots__ = ()
90
+
91
+ def __new__(
92
+ cls,
93
+ scheme=None,
94
+ auth=None,
95
+ host=None,
96
+ port=None,
97
+ path=None,
98
+ query=None,
99
+ fragment=None,
100
+ ):
101
+ if path and not path.startswith("/"):
102
+ path = "/" + path
103
+ if scheme is not None:
104
+ scheme = scheme.lower()
105
+ return super(Url, cls).__new__(
106
+ cls, scheme, auth, host, port, path, query, fragment
107
+ )
108
+
109
+ @property
110
+ def hostname(self):
111
+ """For backwards-compatibility with urlparse. We're nice like that."""
112
+ return self.host
113
+
114
+ @property
115
+ def request_uri(self):
116
+ """Absolute path including the query string."""
117
+ uri = self.path or "/"
118
+
119
+ if self.query is not None:
120
+ uri += "?" + self.query
121
+
122
+ return uri
123
+
124
+ @property
125
+ def netloc(self):
126
+ """Network location including host and port"""
127
+ if self.port:
128
+ return "%s:%d" % (self.host, self.port)
129
+ return self.host
130
+
131
+ @property
132
+ def url(self):
133
+ """
134
+ Convert self into a url
135
+
136
+ This function should more or less round-trip with :func:`.parse_url`. The
137
+ returned url may not be exactly the same as the url inputted to
138
+ :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls
139
+ with a blank port will have : removed).
140
+
141
+ Example: ::
142
+
143
+ >>> U = parse_url('http://google.com/mail/')
144
+ >>> U.url
145
+ 'http://google.com/mail/'
146
+ >>> Url('http', 'username:password', 'host.com', 80,
147
+ ... '/path', 'query', 'fragment').url
148
+ 'http://username:password@host.com:80/path?query#fragment'
149
+ """
150
+ scheme, auth, host, port, path, query, fragment = self
151
+ url = u""
152
+
153
+ # We use "is not None" we want things to happen with empty strings (or 0 port)
154
+ if scheme is not None:
155
+ url += scheme + u"://"
156
+ if auth is not None:
157
+ url += auth + u"@"
158
+ if host is not None:
159
+ url += host
160
+ if port is not None:
161
+ url += u":" + str(port)
162
+ if path is not None:
163
+ url += path
164
+ if query is not None:
165
+ url += u"?" + query
166
+ if fragment is not None:
167
+ url += u"#" + fragment
168
+
169
+ return url
170
+
171
+ def __str__(self):
172
+ return self.url
173
+
174
+
175
+ def split_first(s, delims):
176
+ """
177
+ .. deprecated:: 1.25
178
+
179
+ Given a string and an iterable of delimiters, split on the first found
180
+ delimiter. Return two split parts and the matched delimiter.
181
+
182
+ If not found, then the first part is the full input string.
183
+
184
+ Example::
185
+
186
+ >>> split_first('foo/bar?baz', '?/=')
187
+ ('foo', 'bar?baz', '/')
188
+ >>> split_first('foo/bar?baz', '123')
189
+ ('foo/bar?baz', '', None)
190
+
191
+ Scales linearly with number of delims. Not ideal for large number of delims.
192
+ """
193
+ min_idx = None
194
+ min_delim = None
195
+ for d in delims:
196
+ idx = s.find(d)
197
+ if idx < 0:
198
+ continue
199
+
200
+ if min_idx is None or idx < min_idx:
201
+ min_idx = idx
202
+ min_delim = d
203
+
204
+ if min_idx is None or min_idx < 0:
205
+ return s, "", None
206
+
207
+ return s[:min_idx], s[min_idx + 1 :], min_delim
208
+
209
+
210
+ def _encode_invalid_chars(component, allowed_chars, encoding="utf-8"):
211
+ """Percent-encodes a URI component without reapplying
212
+ onto an already percent-encoded component.
213
+ """
214
+ if component is None:
215
+ return component
216
+
217
+ component = six.ensure_text(component)
218
+
219
+ # Normalize existing percent-encoded bytes.
220
+ # Try to see if the component we're encoding is already percent-encoded
221
+ # so we can skip all '%' characters but still encode all others.
222
+ component, percent_encodings = PERCENT_RE.subn(
223
+ lambda match: match.group(0).upper(), component
224
+ )
225
+
226
+ uri_bytes = component.encode("utf-8", "surrogatepass")
227
+ is_percent_encoded = percent_encodings == uri_bytes.count(b"%")
228
+ encoded_component = bytearray()
229
+
230
+ for i in range(0, len(uri_bytes)):
231
+ # Will return a single character bytestring on both Python 2 & 3
232
+ byte = uri_bytes[i : i + 1]
233
+ byte_ord = ord(byte)
234
+ if (is_percent_encoded and byte == b"%") or (
235
+ byte_ord < 128 and byte.decode() in allowed_chars
236
+ ):
237
+ encoded_component += byte
238
+ continue
239
+ encoded_component.extend(b"%" + (hex(byte_ord)[2:].encode().zfill(2).upper()))
240
+
241
+ return encoded_component.decode(encoding)
242
+
243
+
244
+ def _remove_path_dot_segments(path):
245
+ # See http://tools.ietf.org/html/rfc3986#section-5.2.4 for pseudo-code
246
+ segments = path.split("/") # Turn the path into a list of segments
247
+ output = [] # Initialize the variable to use to store output
248
+
249
+ for segment in segments:
250
+ # '.' is the current directory, so ignore it, it is superfluous
251
+ if segment == ".":
252
+ continue
253
+ # Anything other than '..', should be appended to the output
254
+ elif segment != "..":
255
+ output.append(segment)
256
+ # In this case segment == '..', if we can, we should pop the last
257
+ # element
258
+ elif output:
259
+ output.pop()
260
+
261
+ # If the path starts with '/' and the output is empty or the first string
262
+ # is non-empty
263
+ if path.startswith("/") and (not output or output[0]):
264
+ output.insert(0, "")
265
+
266
+ # If the path starts with '/.' or '/..' ensure we add one more empty
267
+ # string to add a trailing '/'
268
+ if path.endswith(("/.", "/..")):
269
+ output.append("")
270
+
271
+ return "/".join(output)
272
+
273
+
274
+ def _normalize_host(host, scheme):
275
+ if host:
276
+ if isinstance(host, six.binary_type):
277
+ host = six.ensure_str(host)
278
+
279
+ if scheme in NORMALIZABLE_SCHEMES:
280
+ is_ipv6 = IPV6_ADDRZ_RE.match(host)
281
+ if is_ipv6:
282
+ # IPv6 hosts of the form 'a::b%zone' are encoded in a URL as
283
+ # such per RFC 6874: 'a::b%25zone'. Unquote the ZoneID
284
+ # separator as necessary to return a valid RFC 4007 scoped IP.
285
+ match = ZONE_ID_RE.search(host)
286
+ if match:
287
+ start, end = match.span(1)
288
+ zone_id = host[start:end]
289
+
290
+ if zone_id.startswith("%25") and zone_id != "%25":
291
+ zone_id = zone_id[3:]
292
+ else:
293
+ zone_id = zone_id[1:]
294
+ zone_id = "%" + _encode_invalid_chars(zone_id, UNRESERVED_CHARS)
295
+ return host[:start].lower() + zone_id + host[end:]
296
+ else:
297
+ return host.lower()
298
+ elif not IPV4_RE.match(host):
299
+ return six.ensure_str(
300
+ b".".join([_idna_encode(label) for label in host.split(".")])
301
+ )
302
+ return host
303
+
304
+
305
+ def _idna_encode(name):
306
+ if name and any(ord(x) >= 128 for x in name):
307
+ try:
308
+ from pip._vendor import idna
309
+ except ImportError:
310
+ six.raise_from(
311
+ LocationParseError("Unable to parse URL without the 'idna' module"),
312
+ None,
313
+ )
314
+ try:
315
+ return idna.encode(name.lower(), strict=True, std3_rules=True)
316
+ except idna.IDNAError:
317
+ six.raise_from(
318
+ LocationParseError(u"Name '%s' is not a valid IDNA label" % name), None
319
+ )
320
+ return name.lower().encode("ascii")
321
+
322
+
323
+ def _encode_target(target):
324
+ """Percent-encodes a request target so that there are no invalid characters"""
325
+ path, query = TARGET_RE.match(target).groups()
326
+ target = _encode_invalid_chars(path, PATH_CHARS)
327
+ query = _encode_invalid_chars(query, QUERY_CHARS)
328
+ if query is not None:
329
+ target += "?" + query
330
+ return target
331
+
332
+
333
+ def parse_url(url):
334
+ """
335
+ Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is
336
+ performed to parse incomplete urls. Fields not provided will be None.
337
+ This parser is RFC 3986 and RFC 6874 compliant.
338
+
339
+ The parser logic and helper functions are based heavily on
340
+ work done in the ``rfc3986`` module.
341
+
342
+ :param str url: URL to parse into a :class:`.Url` namedtuple.
343
+
344
+ Partly backwards-compatible with :mod:`urlparse`.
345
+
346
+ Example::
347
+
348
+ >>> parse_url('http://google.com/mail/')
349
+ Url(scheme='http', host='google.com', port=None, path='/mail/', ...)
350
+ >>> parse_url('google.com:80')
351
+ Url(scheme=None, host='google.com', port=80, path=None, ...)
352
+ >>> parse_url('/foo?bar')
353
+ Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...)
354
+ """
355
+ if not url:
356
+ # Empty
357
+ return Url()
358
+
359
+ source_url = url
360
+ if not SCHEME_RE.search(url):
361
+ url = "//" + url
362
+
363
+ try:
364
+ scheme, authority, path, query, fragment = URI_RE.match(url).groups()
365
+ normalize_uri = scheme is None or scheme.lower() in NORMALIZABLE_SCHEMES
366
+
367
+ if scheme:
368
+ scheme = scheme.lower()
369
+
370
+ if authority:
371
+ auth, _, host_port = authority.rpartition("@")
372
+ auth = auth or None
373
+ host, port = _HOST_PORT_RE.match(host_port).groups()
374
+ if auth and normalize_uri:
375
+ auth = _encode_invalid_chars(auth, USERINFO_CHARS)
376
+ if port == "":
377
+ port = None
378
+ else:
379
+ auth, host, port = None, None, None
380
+
381
+ if port is not None:
382
+ port = int(port)
383
+ if not (0 <= port <= 65535):
384
+ raise LocationParseError(url)
385
+
386
+ host = _normalize_host(host, scheme)
387
+
388
+ if normalize_uri and path:
389
+ path = _remove_path_dot_segments(path)
390
+ path = _encode_invalid_chars(path, PATH_CHARS)
391
+ if normalize_uri and query:
392
+ query = _encode_invalid_chars(query, QUERY_CHARS)
393
+ if normalize_uri and fragment:
394
+ fragment = _encode_invalid_chars(fragment, FRAGMENT_CHARS)
395
+
396
+ except (ValueError, AttributeError):
397
+ return six.raise_from(LocationParseError(source_url), None)
398
+
399
+ # For the sake of backwards compatibility we put empty
400
+ # string values for path if there are any defined values
401
+ # beyond the path in the URL.
402
+ # TODO: Remove this when we break backwards compatibility.
403
+ if not path:
404
+ if query is not None or fragment is not None:
405
+ path = ""
406
+ else:
407
+ path = None
408
+
409
+ # Ensure that each part of the URL is a `str` for
410
+ # backwards compatibility.
411
+ if isinstance(url, six.text_type):
412
+ ensure_func = six.ensure_text
413
+ else:
414
+ ensure_func = six.ensure_str
415
+
416
+ def ensure_type(x):
417
+ return x if x is None else ensure_func(x)
418
+
419
+ return Url(
420
+ scheme=ensure_type(scheme),
421
+ auth=ensure_type(auth),
422
+ host=ensure_type(host),
423
+ port=port,
424
+ path=ensure_type(path),
425
+ query=ensure_type(query),
426
+ fragment=ensure_type(fragment),
427
+ )
428
+
429
+
430
+ def get_host(url):
431
+ """
432
+ Deprecated. Use :func:`parse_url` instead.
433
+ """
434
+ p = parse_url(url)
435
+ return p.scheme or "http", p.hostname, p.port
.venv/Lib/site-packages/pip/_vendor/urllib3/util/wait.py ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import errno
2
+ import select
3
+ import sys
4
+ from functools import partial
5
+
6
+ try:
7
+ from time import monotonic
8
+ except ImportError:
9
+ from time import time as monotonic
10
+
11
+ __all__ = ["NoWayToWaitForSocketError", "wait_for_read", "wait_for_write"]
12
+
13
+
14
+ class NoWayToWaitForSocketError(Exception):
15
+ pass
16
+
17
+
18
+ # How should we wait on sockets?
19
+ #
20
+ # There are two types of APIs you can use for waiting on sockets: the fancy
21
+ # modern stateful APIs like epoll/kqueue, and the older stateless APIs like
22
+ # select/poll. The stateful APIs are more efficient when you have a lots of
23
+ # sockets to keep track of, because you can set them up once and then use them
24
+ # lots of times. But we only ever want to wait on a single socket at a time
25
+ # and don't want to keep track of state, so the stateless APIs are actually
26
+ # more efficient. So we want to use select() or poll().
27
+ #
28
+ # Now, how do we choose between select() and poll()? On traditional Unixes,
29
+ # select() has a strange calling convention that makes it slow, or fail
30
+ # altogether, for high-numbered file descriptors. The point of poll() is to fix
31
+ # that, so on Unixes, we prefer poll().
32
+ #
33
+ # On Windows, there is no poll() (or at least Python doesn't provide a wrapper
34
+ # for it), but that's OK, because on Windows, select() doesn't have this
35
+ # strange calling convention; plain select() works fine.
36
+ #
37
+ # So: on Windows we use select(), and everywhere else we use poll(). We also
38
+ # fall back to select() in case poll() is somehow broken or missing.
39
+
40
+ if sys.version_info >= (3, 5):
41
+ # Modern Python, that retries syscalls by default
42
+ def _retry_on_intr(fn, timeout):
43
+ return fn(timeout)
44
+
45
+ else:
46
+ # Old and broken Pythons.
47
+ def _retry_on_intr(fn, timeout):
48
+ if timeout is None:
49
+ deadline = float("inf")
50
+ else:
51
+ deadline = monotonic() + timeout
52
+
53
+ while True:
54
+ try:
55
+ return fn(timeout)
56
+ # OSError for 3 <= pyver < 3.5, select.error for pyver <= 2.7
57
+ except (OSError, select.error) as e:
58
+ # 'e.args[0]' incantation works for both OSError and select.error
59
+ if e.args[0] != errno.EINTR:
60
+ raise
61
+ else:
62
+ timeout = deadline - monotonic()
63
+ if timeout < 0:
64
+ timeout = 0
65
+ if timeout == float("inf"):
66
+ timeout = None
67
+ continue
68
+
69
+
70
+ def select_wait_for_socket(sock, read=False, write=False, timeout=None):
71
+ if not read and not write:
72
+ raise RuntimeError("must specify at least one of read=True, write=True")
73
+ rcheck = []
74
+ wcheck = []
75
+ if read:
76
+ rcheck.append(sock)
77
+ if write:
78
+ wcheck.append(sock)
79
+ # When doing a non-blocking connect, most systems signal success by
80
+ # marking the socket writable. Windows, though, signals success by marked
81
+ # it as "exceptional". We paper over the difference by checking the write
82
+ # sockets for both conditions. (The stdlib selectors module does the same
83
+ # thing.)
84
+ fn = partial(select.select, rcheck, wcheck, wcheck)
85
+ rready, wready, xready = _retry_on_intr(fn, timeout)
86
+ return bool(rready or wready or xready)
87
+
88
+
89
+ def poll_wait_for_socket(sock, read=False, write=False, timeout=None):
90
+ if not read and not write:
91
+ raise RuntimeError("must specify at least one of read=True, write=True")
92
+ mask = 0
93
+ if read:
94
+ mask |= select.POLLIN
95
+ if write:
96
+ mask |= select.POLLOUT
97
+ poll_obj = select.poll()
98
+ poll_obj.register(sock, mask)
99
+
100
+ # For some reason, poll() takes timeout in milliseconds
101
+ def do_poll(t):
102
+ if t is not None:
103
+ t *= 1000
104
+ return poll_obj.poll(t)
105
+
106
+ return bool(_retry_on_intr(do_poll, timeout))
107
+
108
+
109
+ def null_wait_for_socket(*args, **kwargs):
110
+ raise NoWayToWaitForSocketError("no select-equivalent available")
111
+
112
+
113
+ def _have_working_poll():
114
+ # Apparently some systems have a select.poll that fails as soon as you try
115
+ # to use it, either due to strange configuration or broken monkeypatching
116
+ # from libraries like eventlet/greenlet.
117
+ try:
118
+ poll_obj = select.poll()
119
+ _retry_on_intr(poll_obj.poll, 0)
120
+ except (AttributeError, OSError):
121
+ return False
122
+ else:
123
+ return True
124
+
125
+
126
+ def wait_for_socket(*args, **kwargs):
127
+ # We delay choosing which implementation to use until the first time we're
128
+ # called. We could do it at import time, but then we might make the wrong
129
+ # decision if someone goes wild with monkeypatching select.poll after
130
+ # we're imported.
131
+ global wait_for_socket
132
+ if _have_working_poll():
133
+ wait_for_socket = poll_wait_for_socket
134
+ elif hasattr(select, "select"):
135
+ wait_for_socket = select_wait_for_socket
136
+ else: # Platform-specific: Appengine.
137
+ wait_for_socket = null_wait_for_socket
138
+ return wait_for_socket(*args, **kwargs)
139
+
140
+
141
+ def wait_for_read(sock, timeout=None):
142
+ """Waits for reading to be available on a given socket.
143
+ Returns True if the socket is readable, or False if the timeout expired.
144
+ """
145
+ return wait_for_socket(sock, read=True, timeout=timeout)
146
+
147
+
148
+ def wait_for_write(sock, timeout=None):
149
+ """Waits for writing to be available on a given socket.
150
+ Returns True if the socket is readable, or False if the timeout expired.
151
+ """
152
+ return wait_for_socket(sock, write=True, timeout=timeout)
.venv/Lib/site-packages/pip/_vendor/vendor.txt ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ CacheControl==0.14.3
2
+ distlib==0.4.0
3
+ distro==1.9.0
4
+ msgpack==1.1.1
5
+ packaging==25.0
6
+ platformdirs==4.3.8
7
+ pyproject-hooks==1.2.0
8
+ requests==2.32.4
9
+ certifi==2025.7.14
10
+ idna==3.10
11
+ urllib3==1.26.20
12
+ rich==14.1.0
13
+ pygments==2.19.2
14
+ resolvelib==1.2.0
15
+ setuptools==70.3.0
16
+ tomli==2.2.1
17
+ tomli-w==1.2.0
18
+ truststore==0.10.1
19
+ dependency-groups==1.3.1
.venv/Lib/site-packages/pip/py.typed ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pip is a command line program. While it is implemented in Python, and so is
2
+ available for import, you must not use pip's internal APIs in this way. Typing
3
+ information is provided as a convenience only and is not a guarantee. Expect
4
+ unannounced changes to the API and types in releases.
.venv/Lib/site-packages/requests-2.34.2.dist-info/INSTALLER ADDED
@@ -0,0 +1 @@
 
 
1
+ pip
.venv/Lib/site-packages/requests-2.34.2.dist-info/METADATA ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: requests
3
+ Version: 2.34.2
4
+ Summary: Python HTTP for Humans.
5
+ Author-email: Kenneth Reitz <me@kennethreitz.org>
6
+ Maintainer-email: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>, Nate Prewitt <nate.prewitt@gmail.com>
7
+ License: Apache-2.0
8
+ Project-URL: Documentation, https://requests.readthedocs.io
9
+ Project-URL: Source, https://github.com/psf/requests
10
+ Classifier: Development Status :: 5 - Production/Stable
11
+ Classifier: Environment :: Web Environment
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Natural Language :: English
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Programming Language :: Python :: 3.15
24
+ Classifier: Programming Language :: Python :: 3 :: Only
25
+ Classifier: Programming Language :: Python :: Implementation :: CPython
26
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
27
+ Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta
28
+ Classifier: Topic :: Internet :: WWW/HTTP
29
+ Classifier: Topic :: Software Development :: Libraries
30
+ Requires-Python: >=3.10
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ License-File: NOTICE
34
+ Requires-Dist: charset_normalizer<4,>=2
35
+ Requires-Dist: idna<4,>=2.5
36
+ Requires-Dist: urllib3<3,>=1.26
37
+ Requires-Dist: certifi>=2023.5.7
38
+ Provides-Extra: security
39
+ Provides-Extra: socks
40
+ Requires-Dist: PySocks!=1.5.7,>=1.5.6; extra == "socks"
41
+ Provides-Extra: use-chardet-on-py3
42
+ Requires-Dist: chardet<8,>=3.0.2; extra == "use-chardet-on-py3"
43
+ Dynamic: license-file
44
+
45
+ # Requests
46
+
47
+ [![Version](https://img.shields.io/pypi/v/requests.svg?maxAge=86400)](https://pypi.org/project/requests/)
48
+ [![Supported Versions](https://img.shields.io/pypi/pyversions/requests.svg)](https://pypi.org/project/requests)
49
+ [![Downloads](https://static.pepy.tech/badge/requests/month)](https://pepy.tech/project/requests)
50
+ [![Contributors](https://img.shields.io/github/contributors/psf/requests.svg)](https://github.com/psf/requests/graphs/contributors)
51
+ [![Documentation](https://readthedocs.org/projects/requests/badge/?version=latest)](https://requests.readthedocs.io)
52
+
53
+ **Requests** is a simple, yet elegant, HTTP library.
54
+
55
+ ```python
56
+ >>> import requests
57
+ >>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))
58
+ >>> r.status_code
59
+ 200
60
+ >>> r.headers['content-type']
61
+ 'application/json; charset=utf8'
62
+ >>> r.encoding
63
+ 'utf-8'
64
+ >>> r.text
65
+ '{"authenticated": true, ...'
66
+ >>> r.json()
67
+ {'authenticated': True, ...}
68
+ ```
69
+
70
+ Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!
71
+
72
+ Requests is one of the most downloaded Python packages today, pulling in around `300M downloads / week` — according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `4,000,000+` repositories.
73
+
74
+ ## Installing Requests and Supported Versions
75
+
76
+ Requests is available on PyPI:
77
+
78
+ ```console
79
+ $ python -m pip install requests
80
+ ```
81
+
82
+ Requests officially supports Python 3.10+.
83
+
84
+ ## Supported Features & Best–Practices
85
+
86
+ Requests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today.
87
+
88
+ - Keep-Alive & Connection Pooling
89
+ - International Domains and URLs
90
+ - Sessions with Cookie Persistence
91
+ - Browser-style TLS/SSL Verification
92
+ - Basic & Digest Authentication
93
+ - Familiar `dict`–like Cookies
94
+ - Automatic Content Decompression and Decoding
95
+ - Multi-part File Uploads
96
+ - SOCKS Proxy Support
97
+ - Connection Timeouts
98
+ - Streaming Downloads
99
+ - Automatic honoring of `.netrc`
100
+ - Chunked HTTP Requests
101
+
102
+ ## Cloning the repository
103
+
104
+ When cloning the Requests repository, you may need to add the `-c
105
+ fetch.fsck.badTimezone=ignore` flag to avoid an error about a bad commit timestamp (see
106
+ [this issue](https://github.com/psf/requests/issues/2690) for more background):
107
+
108
+ ```shell
109
+ git clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git
110
+ ```
111
+
112
+ You can also apply this setting to your global Git config:
113
+
114
+ ```shell
115
+ git config --global fetch.fsck.badTimezone ignore
116
+ ```
117
+
118
+ ---
119
+
120
+ [![Kenneth Reitz](https://raw.githubusercontent.com/psf/requests/main/ext/kr.png)](https://kennethreitz.org) [![Python Software Foundation](https://raw.githubusercontent.com/psf/requests/main/ext/psf.png)](https://www.python.org/psf)
.venv/Lib/site-packages/requests-2.34.2.dist-info/RECORD ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ requests-2.34.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2
+ requests-2.34.2.dist-info/METADATA,sha256=jDhLo-l5SA-q4oWdPF5sEnbdLDYW4yLhJNUsjPxVbyc,4806
3
+ requests-2.34.2.dist-info/RECORD,,
4
+ requests-2.34.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ requests-2.34.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
6
+ requests-2.34.2.dist-info/licenses/LICENSE,sha256=CeipvOyAZxBGUsFoaFqwkx54aPnIKEtm9a5u2uXxEws,10142
7
+ requests-2.34.2.dist-info/licenses/NOTICE,sha256=9REJct7a0rTp0xRRja87fXLW4C5Jms2AIYHeb3RXHcw,38
8
+ requests-2.34.2.dist-info/top_level.txt,sha256=fMSVmHfb5rbGOo6xv-O_tUX6j-WyixssE-SnwcDRxNQ,9
9
+ requests/__init__.py,sha256=MRFX5_pKqRZsgn1SN-b9aU7rXKVJ7kDi6Q-J8hq81W4,5922
10
+ requests/__pycache__/__init__.cpython-314.pyc,,
11
+ requests/__pycache__/__version__.cpython-314.pyc,,
12
+ requests/__pycache__/_internal_utils.cpython-314.pyc,,
13
+ requests/__pycache__/_types.cpython-314.pyc,,
14
+ requests/__pycache__/adapters.cpython-314.pyc,,
15
+ requests/__pycache__/api.cpython-314.pyc,,
16
+ requests/__pycache__/auth.cpython-314.pyc,,
17
+ requests/__pycache__/certs.cpython-314.pyc,,
18
+ requests/__pycache__/compat.cpython-314.pyc,,
19
+ requests/__pycache__/cookies.cpython-314.pyc,,
20
+ requests/__pycache__/exceptions.cpython-314.pyc,,
21
+ requests/__pycache__/help.cpython-314.pyc,,
22
+ requests/__pycache__/hooks.cpython-314.pyc,,
23
+ requests/__pycache__/models.cpython-314.pyc,,
24
+ requests/__pycache__/packages.cpython-314.pyc,,
25
+ requests/__pycache__/sessions.cpython-314.pyc,,
26
+ requests/__pycache__/status_codes.cpython-314.pyc,,
27
+ requests/__pycache__/structures.cpython-314.pyc,,
28
+ requests/__pycache__/utils.cpython-314.pyc,,
29
+ requests/__version__.py,sha256=q7qQZwsDcKPcQNl8LepGo11L7JQf8Q18PPMJjvBKF_k,435
30
+ requests/_internal_utils.py,sha256=TH2NEyyYmPx9cV5HPzrHR4XdxKuW0skkD4eDXcbZgf8,1542
31
+ requests/_types.py,sha256=0G33n1SiecDMP67FlsRGJG1a0U7f1SnrMo3vvWKkSok,5838
32
+ requests/adapters.py,sha256=ZH6r1EU94jKqQLVf8DPW8Zd4kQt-cGnFH99jB2_HdJM,28064
33
+ requests/api.py,sha256=TRVICsBG8Ikgl5joZQR270oo6-b4G0AHWPjvQuxrVQk,7152
34
+ requests/auth.py,sha256=6TlRpVLUw8X9m4Sl4dSbA8qrpHI8T_ES2mBTYA7IWmU,12233
35
+ requests/certs.py,sha256=_ZxrgzWc75D_bE7uq43MI4jaOC68p9AKSZs8C0NKh-Q,430
36
+ requests/compat.py,sha256=XXm6KJaQtQFQRDQaH3vH0kE0_BOi2z78-FJRW_mqGLQ,2465
37
+ requests/cookies.py,sha256=ChzmFA8rlCBSLFCA41bmifp5bCUi9VyhCCb17Y4Kcjw,21549
38
+ requests/exceptions.py,sha256=xeGPM1JFSWjjN7swVvCGffLzfAoNLBp33AXn4LPAQRs,4564
39
+ requests/help.py,sha256=cjUZuxiE2hjYT2svt49-v3-1f3MgcLYCWuBx2sai0Xk,4210
40
+ requests/hooks.py,sha256=69igJHXTGg5HOo9VPpUB_0NkW5VjiFrVKETnpj8Ndqs,1138
41
+ requests/models.py,sha256=0bwNmQq_XV6-4F-JCRG0Nj-t8tUmS2hqlj30fFKbas4,41783
42
+ requests/packages.py,sha256=_g0gZ681UyAlKHRjH6kanbaoxx2eAb6qzcXiODyTIoc,904
43
+ requests/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ requests/sessions.py,sha256=lvuzC7vwalmlJo0TtXiFFJdWqj8xaVtcFeQd17svZ6Y,34248
45
+ requests/status_codes.py,sha256=GVD0fInPGAGXh-B9jOSPZtazjmIvfZTXCpAkf-5sBA4,4351
46
+ requests/structures.py,sha256=upRgw5B48l5vHSokrJQaxvjS7pcZf6jI0MJi2KHmegI,4134
47
+ requests/utils.py,sha256=ZX_QI0OyWGu9E4pOwPA87rdhDCcS-WrFTyinCL99B5w,36322
.venv/Lib/site-packages/requests-2.34.2.dist-info/REQUESTED ADDED
File without changes
.venv/Lib/site-packages/requests-2.34.2.dist-info/WHEEL ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
.venv/Lib/site-packages/requests-2.34.2.dist-info/licenses/LICENSE ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
.venv/Lib/site-packages/requests-2.34.2.dist-info/licenses/NOTICE ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ Requests
2
+ Copyright 2019 Kenneth Reitz
.venv/Lib/site-packages/requests-2.34.2.dist-info/top_level.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ requests