#
tokens: 48578/50000 8/808 files (page 23/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 23 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import absolute_import
  2 | 
  3 | import sys
  4 | 
  5 | from .filepost import encode_multipart_formdata
  6 | from .packages import six
  7 | from .packages.six.moves.urllib.parse import urlencode
  8 | 
  9 | __all__ = ["RequestMethods"]
 10 | 
 11 | 
 12 | class RequestMethods(object):
 13 |     """
 14 |     Convenience mixin for classes who implement a :meth:`urlopen` method, such
 15 |     as :class:`urllib3.HTTPConnectionPool` and
 16 |     :class:`urllib3.PoolManager`.
 17 | 
 18 |     Provides behavior for making common types of HTTP request methods and
 19 |     decides which type of request field encoding to use.
 20 | 
 21 |     Specifically,
 22 | 
 23 |     :meth:`.request_encode_url` is for sending requests whose fields are
 24 |     encoded in the URL (such as GET, HEAD, DELETE).
 25 | 
 26 |     :meth:`.request_encode_body` is for sending requests whose fields are
 27 |     encoded in the *body* of the request using multipart or www-form-urlencoded
 28 |     (such as for POST, PUT, PATCH).
 29 | 
 30 |     :meth:`.request` is for making any kind of request, it will look up the
 31 |     appropriate encoding format and use one of the above two methods to make
 32 |     the request.
 33 | 
 34 |     Initializer parameters:
 35 | 
 36 |     :param headers:
 37 |         Headers to include with all requests, unless other headers are given
 38 |         explicitly.
 39 |     """
 40 | 
 41 |     _encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"}
 42 | 
 43 |     def __init__(self, headers=None):
 44 |         self.headers = headers or {}
 45 | 
 46 |     def urlopen(
 47 |         self,
 48 |         method,
 49 |         url,
 50 |         body=None,
 51 |         headers=None,
 52 |         encode_multipart=True,
 53 |         multipart_boundary=None,
 54 |         **kw
 55 |     ):  # Abstract
 56 |         raise NotImplementedError(
 57 |             "Classes extending RequestMethods must implement "
 58 |             "their own ``urlopen`` method."
 59 |         )
 60 | 
 61 |     def request(self, method, url, fields=None, headers=None, **urlopen_kw):
 62 |         """
 63 |         Make a request using :meth:`urlopen` with the appropriate encoding of
 64 |         ``fields`` based on the ``method`` used.
 65 | 
 66 |         This is a convenience method that requires the least amount of manual
 67 |         effort. It can be used in most situations, while still having the
 68 |         option to drop down to more specific methods when necessary, such as
 69 |         :meth:`request_encode_url`, :meth:`request_encode_body`,
 70 |         or even the lowest level :meth:`urlopen`.
 71 |         """
 72 |         method = method.upper()
 73 | 
 74 |         urlopen_kw["request_url"] = url
 75 | 
 76 |         if method in self._encode_url_methods:
 77 |             return self.request_encode_url(
 78 |                 method, url, fields=fields, headers=headers, **urlopen_kw
 79 |             )
 80 |         else:
 81 |             return self.request_encode_body(
 82 |                 method, url, fields=fields, headers=headers, **urlopen_kw
 83 |             )
 84 | 
 85 |     def request_encode_url(self, method, url, fields=None, headers=None, **urlopen_kw):
 86 |         """
 87 |         Make a request using :meth:`urlopen` with the ``fields`` encoded in
 88 |         the url. This is useful for request methods like GET, HEAD, DELETE, etc.
 89 |         """
 90 |         if headers is None:
 91 |             headers = self.headers
 92 | 
 93 |         extra_kw = {"headers": headers}
 94 |         extra_kw.update(urlopen_kw)
 95 | 
 96 |         if fields:
 97 |             url += "?" + urlencode(fields)
 98 | 
 99 |         return self.urlopen(method, url, **extra_kw)
100 | 
101 |     def request_encode_body(
102 |         self,
103 |         method,
104 |         url,
105 |         fields=None,
106 |         headers=None,
107 |         encode_multipart=True,
108 |         multipart_boundary=None,
109 |         **urlopen_kw
110 |     ):
111 |         """
112 |         Make a request using :meth:`urlopen` with the ``fields`` encoded in
113 |         the body. This is useful for request methods like POST, PUT, PATCH, etc.
114 | 
115 |         When ``encode_multipart=True`` (default), then
116 |         :func:`urllib3.encode_multipart_formdata` is used to encode
117 |         the payload with the appropriate content type. Otherwise
118 |         :func:`urllib.parse.urlencode` is used with the
119 |         'application/x-www-form-urlencoded' content type.
120 | 
121 |         Multipart encoding must be used when posting files, and it's reasonably
122 |         safe to use it in other times too. However, it may break request
123 |         signing, such as with OAuth.
124 | 
125 |         Supports an optional ``fields`` parameter of key/value strings AND
126 |         key/filetuple. A filetuple is a (filename, data, MIME type) tuple where
127 |         the MIME type is optional. For example::
128 | 
129 |             fields = {
130 |                 'foo': 'bar',
131 |                 'fakefile': ('foofile.txt', 'contents of foofile'),
132 |                 'realfile': ('barfile.txt', open('realfile').read()),
133 |                 'typedfile': ('bazfile.bin', open('bazfile').read(),
134 |                               'image/jpeg'),
135 |                 'nonamefile': 'contents of nonamefile field',
136 |             }
137 | 
138 |         When uploading a file, providing a filename (the first parameter of the
139 |         tuple) is optional but recommended to best mimic behavior of browsers.
140 | 
141 |         Note that if ``headers`` are supplied, the 'Content-Type' header will
142 |         be overwritten because it depends on the dynamic random boundary string
143 |         which is used to compose the body of the request. The random boundary
144 |         string can be explicitly set with the ``multipart_boundary`` parameter.
145 |         """
146 |         if headers is None:
147 |             headers = self.headers
148 | 
149 |         extra_kw = {"headers": {}}
150 | 
151 |         if fields:
152 |             if "body" in urlopen_kw:
153 |                 raise TypeError(
154 |                     "request got values for both 'fields' and 'body', can only specify one."
155 |                 )
156 | 
157 |             if encode_multipart:
158 |                 body, content_type = encode_multipart_formdata(
159 |                     fields, boundary=multipart_boundary
160 |                 )
161 |             else:
162 |                 body, content_type = (
163 |                     urlencode(fields),
164 |                     "application/x-www-form-urlencoded",
165 |                 )
166 | 
167 |             extra_kw["body"] = body
168 |             extra_kw["headers"] = {"Content-Type": content_type}
169 | 
170 |         extra_kw["headers"].update(headers)
171 |         extra_kw.update(urlopen_kw)
172 | 
173 |         return self.urlopen(method, url, **extra_kw)
174 | 
175 | 
176 | if not six.PY2:
177 | 
178 |     class RequestModule(sys.modules[__name__].__class__):
179 |         def __call__(self, *args, **kwargs):
180 |             """
181 |             If user tries to call this module directly urllib3 v2.x style raise an error to the user
182 |             suggesting they may need urllib3 v2
183 |             """
184 |             raise TypeError(
185 |                 "'module' object is not callable\n"
186 |                 "urllib3.request() method is not supported in this release, "
187 |                 "upgrade to urllib3 v2 to use it\n"
188 |                 "see https://urllib3.readthedocs.io/en/stable/v2-migration-guide.html"
189 |             )
190 | 
191 |     sys.modules[__name__].__class__ = RequestModule
192 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py:
--------------------------------------------------------------------------------

```python
  1 | import logging
  2 | from typing import TYPE_CHECKING, Iterable, Optional, Set, Tuple
  3 | 
  4 | from pip._internal.build_env import BuildEnvironment
  5 | from pip._internal.distributions.base import AbstractDistribution
  6 | from pip._internal.exceptions import InstallationError
  7 | from pip._internal.metadata import BaseDistribution
  8 | from pip._internal.utils.subprocess import runner_with_spinner_message
  9 | 
 10 | if TYPE_CHECKING:
 11 |     from pip._internal.index.package_finder import PackageFinder
 12 | 
 13 | logger = logging.getLogger(__name__)
 14 | 
 15 | 
 16 | class SourceDistribution(AbstractDistribution):
 17 |     """Represents a source distribution.
 18 | 
 19 |     The preparation step for these needs metadata for the packages to be
 20 |     generated, either using PEP 517 or using the legacy `setup.py egg_info`.
 21 |     """
 22 | 
 23 |     @property
 24 |     def build_tracker_id(self) -> Optional[str]:
 25 |         """Identify this requirement uniquely by its link."""
 26 |         assert self.req.link
 27 |         return self.req.link.url_without_fragment
 28 | 
 29 |     def get_metadata_distribution(self) -> BaseDistribution:
 30 |         return self.req.get_dist()
 31 | 
 32 |     def prepare_distribution_metadata(
 33 |         self,
 34 |         finder: "PackageFinder",
 35 |         build_isolation: bool,
 36 |         check_build_deps: bool,
 37 |     ) -> None:
 38 |         # Load pyproject.toml, to determine whether PEP 517 is to be used
 39 |         self.req.load_pyproject_toml()
 40 | 
 41 |         # Set up the build isolation, if this requirement should be isolated
 42 |         should_isolate = self.req.use_pep517 and build_isolation
 43 |         if should_isolate:
 44 |             # Setup an isolated environment and install the build backend static
 45 |             # requirements in it.
 46 |             self._prepare_build_backend(finder)
 47 |             # Check that if the requirement is editable, it either supports PEP 660 or
 48 |             # has a setup.py or a setup.cfg. This cannot be done earlier because we need
 49 |             # to setup the build backend to verify it supports build_editable, nor can
 50 |             # it be done later, because we want to avoid installing build requirements
 51 |             # needlessly. Doing it here also works around setuptools generating
 52 |             # UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory
 53 |             # without setup.py nor setup.cfg.
 54 |             self.req.isolated_editable_sanity_check()
 55 |             # Install the dynamic build requirements.
 56 |             self._install_build_reqs(finder)
 57 |         # Check if the current environment provides build dependencies
 58 |         should_check_deps = self.req.use_pep517 and check_build_deps
 59 |         if should_check_deps:
 60 |             pyproject_requires = self.req.pyproject_requires
 61 |             assert pyproject_requires is not None
 62 |             conflicting, missing = self.req.build_env.check_requirements(
 63 |                 pyproject_requires
 64 |             )
 65 |             if conflicting:
 66 |                 self._raise_conflicts("the backend dependencies", conflicting)
 67 |             if missing:
 68 |                 self._raise_missing_reqs(missing)
 69 |         self.req.prepare_metadata()
 70 | 
 71 |     def _prepare_build_backend(self, finder: "PackageFinder") -> None:
 72 |         # Isolate in a BuildEnvironment and install the build-time
 73 |         # requirements.
 74 |         pyproject_requires = self.req.pyproject_requires
 75 |         assert pyproject_requires is not None
 76 | 
 77 |         self.req.build_env = BuildEnvironment()
 78 |         self.req.build_env.install_requirements(
 79 |             finder, pyproject_requires, "overlay", kind="build dependencies"
 80 |         )
 81 |         conflicting, missing = self.req.build_env.check_requirements(
 82 |             self.req.requirements_to_check
 83 |         )
 84 |         if conflicting:
 85 |             self._raise_conflicts("PEP 517/518 supported requirements", conflicting)
 86 |         if missing:
 87 |             logger.warning(
 88 |                 "Missing build requirements in pyproject.toml for %s.",
 89 |                 self.req,
 90 |             )
 91 |             logger.warning(
 92 |                 "The project does not specify a build backend, and "
 93 |                 "pip cannot fall back to setuptools without %s.",
 94 |                 " and ".join(map(repr, sorted(missing))),
 95 |             )
 96 | 
 97 |     def _get_build_requires_wheel(self) -> Iterable[str]:
 98 |         with self.req.build_env:
 99 |             runner = runner_with_spinner_message("Getting requirements to build wheel")
100 |             backend = self.req.pep517_backend
101 |             assert backend is not None
102 |             with backend.subprocess_runner(runner):
103 |                 return backend.get_requires_for_build_wheel()
104 | 
105 |     def _get_build_requires_editable(self) -> Iterable[str]:
106 |         with self.req.build_env:
107 |             runner = runner_with_spinner_message(
108 |                 "Getting requirements to build editable"
109 |             )
110 |             backend = self.req.pep517_backend
111 |             assert backend is not None
112 |             with backend.subprocess_runner(runner):
113 |                 return backend.get_requires_for_build_editable()
114 | 
115 |     def _install_build_reqs(self, finder: "PackageFinder") -> None:
116 |         # Install any extra build dependencies that the backend requests.
117 |         # This must be done in a second pass, as the pyproject.toml
118 |         # dependencies must be installed before we can call the backend.
119 |         if (
120 |             self.req.editable
121 |             and self.req.permit_editable_wheels
122 |             and self.req.supports_pyproject_editable
123 |         ):
124 |             build_reqs = self._get_build_requires_editable()
125 |         else:
126 |             build_reqs = self._get_build_requires_wheel()
127 |         conflicting, missing = self.req.build_env.check_requirements(build_reqs)
128 |         if conflicting:
129 |             self._raise_conflicts("the backend dependencies", conflicting)
130 |         self.req.build_env.install_requirements(
131 |             finder, missing, "normal", kind="backend dependencies"
132 |         )
133 | 
134 |     def _raise_conflicts(
135 |         self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]]
136 |     ) -> None:
137 |         format_string = (
138 |             "Some build dependencies for {requirement} "
139 |             "conflict with {conflicting_with}: {description}."
140 |         )
141 |         error_message = format_string.format(
142 |             requirement=self.req,
143 |             conflicting_with=conflicting_with,
144 |             description=", ".join(
145 |                 f"{installed} is incompatible with {wanted}"
146 |                 for installed, wanted in sorted(conflicting_reqs)
147 |             ),
148 |         )
149 |         raise InstallationError(error_message)
150 | 
151 |     def _raise_missing_reqs(self, missing: Set[str]) -> None:
152 |         format_string = (
153 |             "Some build dependencies for {requirement} are missing: {missing}."
154 |         )
155 |         error_message = format_string.format(
156 |             requirement=self.req, missing=", ".join(map(repr, sorted(missing)))
157 |         )
158 |         raise InstallationError(error_message)
159 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/werkzeug/middleware/proxy_fix.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | X-Forwarded-For Proxy Fix
  3 | =========================
  4 | 
  5 | This module provides a middleware that adjusts the WSGI environ based on
  6 | ``X-Forwarded-`` headers that proxies in front of an application may
  7 | set.
  8 | 
  9 | When an application is running behind a proxy server, WSGI may see the
 10 | request as coming from that server rather than the real client. Proxies
 11 | set various headers to track where the request actually came from.
 12 | 
 13 | This middleware should only be used if the application is actually
 14 | behind such a proxy, and should be configured with the number of proxies
 15 | that are chained in front of it. Not all proxies set all the headers.
 16 | Since incoming headers can be faked, you must set how many proxies are
 17 | setting each header so the middleware knows what to trust.
 18 | 
 19 | .. autoclass:: ProxyFix
 20 | 
 21 | :copyright: 2007 Pallets
 22 | :license: BSD-3-Clause
 23 | """
 24 | 
 25 | from __future__ import annotations
 26 | 
 27 | import typing as t
 28 | 
 29 | from ..http import parse_list_header
 30 | 
 31 | if t.TYPE_CHECKING:
 32 |     from _typeshed.wsgi import StartResponse
 33 |     from _typeshed.wsgi import WSGIApplication
 34 |     from _typeshed.wsgi import WSGIEnvironment
 35 | 
 36 | 
 37 | class ProxyFix:
 38 |     """Adjust the WSGI environ based on ``X-Forwarded-`` that proxies in
 39 |     front of the application may set.
 40 | 
 41 |     -   ``X-Forwarded-For`` sets ``REMOTE_ADDR``.
 42 |     -   ``X-Forwarded-Proto`` sets ``wsgi.url_scheme``.
 43 |     -   ``X-Forwarded-Host`` sets ``HTTP_HOST``, ``SERVER_NAME``, and
 44 |         ``SERVER_PORT``.
 45 |     -   ``X-Forwarded-Port`` sets ``HTTP_HOST`` and ``SERVER_PORT``.
 46 |     -   ``X-Forwarded-Prefix`` sets ``SCRIPT_NAME``.
 47 | 
 48 |     You must tell the middleware how many proxies set each header so it
 49 |     knows what values to trust. It is a security issue to trust values
 50 |     that came from the client rather than a proxy.
 51 | 
 52 |     The original values of the headers are stored in the WSGI
 53 |     environ as ``werkzeug.proxy_fix.orig``, a dict.
 54 | 
 55 |     :param app: The WSGI application to wrap.
 56 |     :param x_for: Number of values to trust for ``X-Forwarded-For``.
 57 |     :param x_proto: Number of values to trust for ``X-Forwarded-Proto``.
 58 |     :param x_host: Number of values to trust for ``X-Forwarded-Host``.
 59 |     :param x_port: Number of values to trust for ``X-Forwarded-Port``.
 60 |     :param x_prefix: Number of values to trust for
 61 |         ``X-Forwarded-Prefix``.
 62 | 
 63 |     .. code-block:: python
 64 | 
 65 |         from werkzeug.middleware.proxy_fix import ProxyFix
 66 |         # App is behind one proxy that sets the -For and -Host headers.
 67 |         app = ProxyFix(app, x_for=1, x_host=1)
 68 | 
 69 |     .. versionchanged:: 1.0
 70 |         The ``num_proxies`` argument and attribute; the ``get_remote_addr`` method; and
 71 |         the environ keys ``orig_remote_addr``, ``orig_wsgi_url_scheme``, and
 72 |         ``orig_http_host`` were removed.
 73 | 
 74 |     .. versionchanged:: 0.15
 75 |         All headers support multiple values. Each header is configured with a separate
 76 |         number of trusted proxies.
 77 | 
 78 |     .. versionchanged:: 0.15
 79 |         Original WSGI environ values are stored in the ``werkzeug.proxy_fix.orig`` dict.
 80 | 
 81 |     .. versionchanged:: 0.15
 82 |         Support ``X-Forwarded-Port`` and ``X-Forwarded-Prefix``.
 83 | 
 84 |     .. versionchanged:: 0.15
 85 |         ``X-Forwarded-Host`` and ``X-Forwarded-Port`` modify
 86 |         ``SERVER_NAME`` and ``SERVER_PORT``.
 87 |     """
 88 | 
 89 |     def __init__(
 90 |         self,
 91 |         app: WSGIApplication,
 92 |         x_for: int = 1,
 93 |         x_proto: int = 1,
 94 |         x_host: int = 0,
 95 |         x_port: int = 0,
 96 |         x_prefix: int = 0,
 97 |     ) -> None:
 98 |         self.app = app
 99 |         self.x_for = x_for
100 |         self.x_proto = x_proto
101 |         self.x_host = x_host
102 |         self.x_port = x_port
103 |         self.x_prefix = x_prefix
104 | 
105 |     def _get_real_value(self, trusted: int, value: str | None) -> str | None:
106 |         """Get the real value from a list header based on the configured
107 |         number of trusted proxies.
108 | 
109 |         :param trusted: Number of values to trust in the header.
110 |         :param value: Comma separated list header value to parse.
111 |         :return: The real value, or ``None`` if there are fewer values
112 |             than the number of trusted proxies.
113 | 
114 |         .. versionchanged:: 1.0
115 |             Renamed from ``_get_trusted_comma``.
116 | 
117 |         .. versionadded:: 0.15
118 |         """
119 |         if not (trusted and value):
120 |             return None
121 |         values = parse_list_header(value)
122 |         if len(values) >= trusted:
123 |             return values[-trusted]
124 |         return None
125 | 
126 |     def __call__(
127 |         self, environ: WSGIEnvironment, start_response: StartResponse
128 |     ) -> t.Iterable[bytes]:
129 |         """Modify the WSGI environ based on the various ``Forwarded``
130 |         headers before calling the wrapped application. Store the
131 |         original environ values in ``werkzeug.proxy_fix.orig_{key}``.
132 |         """
133 |         environ_get = environ.get
134 |         orig_remote_addr = environ_get("REMOTE_ADDR")
135 |         orig_wsgi_url_scheme = environ_get("wsgi.url_scheme")
136 |         orig_http_host = environ_get("HTTP_HOST")
137 |         environ.update(
138 |             {
139 |                 "werkzeug.proxy_fix.orig": {
140 |                     "REMOTE_ADDR": orig_remote_addr,
141 |                     "wsgi.url_scheme": orig_wsgi_url_scheme,
142 |                     "HTTP_HOST": orig_http_host,
143 |                     "SERVER_NAME": environ_get("SERVER_NAME"),
144 |                     "SERVER_PORT": environ_get("SERVER_PORT"),
145 |                     "SCRIPT_NAME": environ_get("SCRIPT_NAME"),
146 |                 }
147 |             }
148 |         )
149 | 
150 |         x_for = self._get_real_value(self.x_for, environ_get("HTTP_X_FORWARDED_FOR"))
151 |         if x_for:
152 |             environ["REMOTE_ADDR"] = x_for
153 | 
154 |         x_proto = self._get_real_value(
155 |             self.x_proto, environ_get("HTTP_X_FORWARDED_PROTO")
156 |         )
157 |         if x_proto:
158 |             environ["wsgi.url_scheme"] = x_proto
159 | 
160 |         x_host = self._get_real_value(self.x_host, environ_get("HTTP_X_FORWARDED_HOST"))
161 |         if x_host:
162 |             environ["HTTP_HOST"] = environ["SERVER_NAME"] = x_host
163 |             # "]" to check for IPv6 address without port
164 |             if ":" in x_host and not x_host.endswith("]"):
165 |                 environ["SERVER_NAME"], environ["SERVER_PORT"] = x_host.rsplit(":", 1)
166 | 
167 |         x_port = self._get_real_value(self.x_port, environ_get("HTTP_X_FORWARDED_PORT"))
168 |         if x_port:
169 |             host = environ.get("HTTP_HOST")
170 |             if host:
171 |                 # "]" to check for IPv6 address without port
172 |                 if ":" in host and not host.endswith("]"):
173 |                     host = host.rsplit(":", 1)[0]
174 |                 environ["HTTP_HOST"] = f"{host}:{x_port}"
175 |             environ["SERVER_PORT"] = x_port
176 | 
177 |         x_prefix = self._get_real_value(
178 |             self.x_prefix, environ_get("HTTP_X_FORWARDED_PREFIX")
179 |         )
180 |         if x_prefix:
181 |             environ["SCRIPT_NAME"] = x_prefix
182 | 
183 |         return self.app(environ, start_response)
184 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/soupsieve/__meta__.py:
--------------------------------------------------------------------------------

```python
  1 | """Meta related things."""
  2 | from __future__ import annotations
  3 | from collections import namedtuple
  4 | import re
  5 | 
  6 | RE_VER = re.compile(
  7 |     r'''(?x)
  8 |     (?P<major>\d+)(?:\.(?P<minor>\d+))?(?:\.(?P<micro>\d+))?
  9 |     (?:(?P<type>a|b|rc)(?P<pre>\d+))?
 10 |     (?:\.post(?P<post>\d+))?
 11 |     (?:\.dev(?P<dev>\d+))?
 12 |     '''
 13 | )
 14 | 
 15 | REL_MAP = {
 16 |     ".dev": "",
 17 |     ".dev-alpha": "a",
 18 |     ".dev-beta": "b",
 19 |     ".dev-candidate": "rc",
 20 |     "alpha": "a",
 21 |     "beta": "b",
 22 |     "candidate": "rc",
 23 |     "final": ""
 24 | }
 25 | 
 26 | DEV_STATUS = {
 27 |     ".dev": "2 - Pre-Alpha",
 28 |     ".dev-alpha": "2 - Pre-Alpha",
 29 |     ".dev-beta": "2 - Pre-Alpha",
 30 |     ".dev-candidate": "2 - Pre-Alpha",
 31 |     "alpha": "3 - Alpha",
 32 |     "beta": "4 - Beta",
 33 |     "candidate": "4 - Beta",
 34 |     "final": "5 - Production/Stable"
 35 | }
 36 | 
 37 | PRE_REL_MAP = {"a": 'alpha', "b": 'beta', "rc": 'candidate'}
 38 | 
 39 | 
 40 | class Version(namedtuple("Version", ["major", "minor", "micro", "release", "pre", "post", "dev"])):
 41 |     """
 42 |     Get the version (PEP 440).
 43 | 
 44 |     A biased approach to the PEP 440 semantic version.
 45 | 
 46 |     Provides a tuple structure which is sorted for comparisons `v1 > v2` etc.
 47 |       (major, minor, micro, release type, pre-release build, post-release build, development release build)
 48 |     Release types are named in is such a way they are comparable with ease.
 49 |     Accessors to check if a development, pre-release, or post-release build. Also provides accessor to get
 50 |     development status for setup files.
 51 | 
 52 |     How it works (currently):
 53 | 
 54 |     - You must specify a release type as either `final`, `alpha`, `beta`, or `candidate`.
 55 |     - To define a development release, you can use either `.dev`, `.dev-alpha`, `.dev-beta`, or `.dev-candidate`.
 56 |       The dot is used to ensure all development specifiers are sorted before `alpha`.
 57 |       You can specify a `dev` number for development builds, but do not have to as implicit development releases
 58 |       are allowed.
 59 |     - You must specify a `pre` value greater than zero if using a prerelease as this project (not PEP 440) does not
 60 |       allow implicit prereleases.
 61 |     - You can optionally set `post` to a value greater than zero to make the build a post release. While post releases
 62 |       are technically allowed in prereleases, it is strongly discouraged, so we are rejecting them. It should be
 63 |       noted that we do not allow `post0` even though PEP 440 does not restrict this. This project specifically
 64 |       does not allow implicit post releases.
 65 |     - It should be noted that we do not support epochs `1!` or local versions `+some-custom.version-1`.
 66 | 
 67 |     Acceptable version releases:
 68 | 
 69 |     ```
 70 |     Version(1, 0, 0, "final")                    1.0
 71 |     Version(1, 2, 0, "final")                    1.2
 72 |     Version(1, 2, 3, "final")                    1.2.3
 73 |     Version(1, 2, 0, ".dev-alpha", pre=4)        1.2a4
 74 |     Version(1, 2, 0, ".dev-beta", pre=4)         1.2b4
 75 |     Version(1, 2, 0, ".dev-candidate", pre=4)    1.2rc4
 76 |     Version(1, 2, 0, "final", post=1)            1.2.post1
 77 |     Version(1, 2, 3, ".dev")                     1.2.3.dev0
 78 |     Version(1, 2, 3, ".dev", dev=1)              1.2.3.dev1
 79 |     ```
 80 | 
 81 |     """
 82 | 
 83 |     def __new__(
 84 |         cls,
 85 |         major: int, minor: int, micro: int, release: str = "final",
 86 |         pre: int = 0, post: int = 0, dev: int = 0
 87 |     ) -> Version:
 88 |         """Validate version info."""
 89 | 
 90 |         # Ensure all parts are positive integers.
 91 |         for value in (major, minor, micro, pre, post):
 92 |             if not (isinstance(value, int) and value >= 0):
 93 |                 raise ValueError("All version parts except 'release' should be integers.")
 94 | 
 95 |         if release not in REL_MAP:
 96 |             raise ValueError(f"'{release}' is not a valid release type.")
 97 | 
 98 |         # Ensure valid pre-release (we do not allow implicit pre-releases).
 99 |         if ".dev-candidate" < release < "final":
100 |             if pre == 0:
101 |                 raise ValueError("Implicit pre-releases not allowed.")
102 |             elif dev:
103 |                 raise ValueError("Version is not a development release.")
104 |             elif post:
105 |                 raise ValueError("Post-releases are not allowed with pre-releases.")
106 | 
107 |         # Ensure valid development or development/pre release
108 |         elif release < "alpha":
109 |             if release > ".dev" and pre == 0:
110 |                 raise ValueError("Implicit pre-release not allowed.")
111 |             elif post:
112 |                 raise ValueError("Post-releases are not allowed with pre-releases.")
113 | 
114 |         # Ensure a valid normal release
115 |         else:
116 |             if pre:
117 |                 raise ValueError("Version is not a pre-release.")
118 |             elif dev:
119 |                 raise ValueError("Version is not a development release.")
120 | 
121 |         return super().__new__(cls, major, minor, micro, release, pre, post, dev)
122 | 
123 |     def _is_pre(self) -> bool:
124 |         """Is prerelease."""
125 | 
126 |         return bool(self.pre > 0)
127 | 
128 |     def _is_dev(self) -> bool:
129 |         """Is development."""
130 | 
131 |         return bool(self.release < "alpha")
132 | 
133 |     def _is_post(self) -> bool:
134 |         """Is post."""
135 | 
136 |         return bool(self.post > 0)
137 | 
138 |     def _get_dev_status(self) -> str:  # pragma: no cover
139 |         """Get development status string."""
140 | 
141 |         return DEV_STATUS[self.release]
142 | 
143 |     def _get_canonical(self) -> str:
144 |         """Get the canonical output string."""
145 | 
146 |         # Assemble major, minor, micro version and append `pre`, `post`, or `dev` if needed..
147 |         if self.micro == 0:
148 |             ver = f"{self.major}.{self.minor}"
149 |         else:
150 |             ver = f"{self.major}.{self.minor}.{self.micro}"
151 |         if self._is_pre():
152 |             ver += f'{REL_MAP[self.release]}{self.pre}'
153 |         if self._is_post():
154 |             ver += f".post{self.post}"
155 |         if self._is_dev():
156 |             ver += f".dev{self.dev}"
157 | 
158 |         return ver
159 | 
160 | 
161 | def parse_version(ver: str) -> Version:
162 |     """Parse version into a comparable Version tuple."""
163 | 
164 |     m = RE_VER.match(ver)
165 | 
166 |     if m is None:
167 |         raise ValueError(f"'{ver}' is not a valid version")
168 | 
169 |     # Handle major, minor, micro
170 |     major = int(m.group('major'))
171 |     minor = int(m.group('minor')) if m.group('minor') else 0
172 |     micro = int(m.group('micro')) if m.group('micro') else 0
173 | 
174 |     # Handle pre releases
175 |     if m.group('type'):
176 |         release = PRE_REL_MAP[m.group('type')]
177 |         pre = int(m.group('pre'))
178 |     else:
179 |         release = "final"
180 |         pre = 0
181 | 
182 |     # Handle development releases
183 |     dev = m.group('dev') if m.group('dev') else 0
184 |     if m.group('dev'):
185 |         dev = int(m.group('dev'))
186 |         release = '.dev-' + release if pre else '.dev'
187 |     else:
188 |         dev = 0
189 | 
190 |     # Handle post
191 |     post = int(m.group('post')) if m.group('post') else 0
192 | 
193 |     return Version(major, minor, micro, release, pre, post, dev)
194 | 
195 | 
196 | __version_info__ = Version(2, 6, 0, "final")
197 | __version__ = __version_info__._get_canonical()
198 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py:
--------------------------------------------------------------------------------

```python
  1 | import locale
  2 | import logging
  3 | import os
  4 | import sys
  5 | from optparse import Values
  6 | from types import ModuleType
  7 | from typing import Any, Dict, List, Optional
  8 | 
  9 | import pip._vendor
 10 | from pip._vendor.certifi import where
 11 | from pip._vendor.packaging.version import parse as parse_version
 12 | 
 13 | from pip._internal.cli import cmdoptions
 14 | from pip._internal.cli.base_command import Command
 15 | from pip._internal.cli.cmdoptions import make_target_python
 16 | from pip._internal.cli.status_codes import SUCCESS
 17 | from pip._internal.configuration import Configuration
 18 | from pip._internal.metadata import get_environment
 19 | from pip._internal.utils.compat import open_text_resource
 20 | from pip._internal.utils.logging import indent_log
 21 | from pip._internal.utils.misc import get_pip_version
 22 | 
 23 | logger = logging.getLogger(__name__)
 24 | 
 25 | 
 26 | def show_value(name: str, value: Any) -> None:
 27 |     logger.info("%s: %s", name, value)
 28 | 
 29 | 
 30 | def show_sys_implementation() -> None:
 31 |     logger.info("sys.implementation:")
 32 |     implementation_name = sys.implementation.name
 33 |     with indent_log():
 34 |         show_value("name", implementation_name)
 35 | 
 36 | 
 37 | def create_vendor_txt_map() -> Dict[str, str]:
 38 |     with open_text_resource("pip._vendor", "vendor.txt") as f:
 39 |         # Purge non version specifying lines.
 40 |         # Also, remove any space prefix or suffixes (including comments).
 41 |         lines = [
 42 |             line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line
 43 |         ]
 44 | 
 45 |     # Transform into "module" -> version dict.
 46 |     return dict(line.split("==", 1) for line in lines)
 47 | 
 48 | 
 49 | def get_module_from_module_name(module_name: str) -> Optional[ModuleType]:
 50 |     # Module name can be uppercase in vendor.txt for some reason...
 51 |     module_name = module_name.lower().replace("-", "_")
 52 |     # PATCH: setuptools is actually only pkg_resources.
 53 |     if module_name == "setuptools":
 54 |         module_name = "pkg_resources"
 55 | 
 56 |     try:
 57 |         __import__(f"pip._vendor.{module_name}", globals(), locals(), level=0)
 58 |         return getattr(pip._vendor, module_name)
 59 |     except ImportError:
 60 |         # We allow 'truststore' to fail to import due
 61 |         # to being unavailable on Python 3.9 and earlier.
 62 |         if module_name == "truststore" and sys.version_info < (3, 10):
 63 |             return None
 64 |         raise
 65 | 
 66 | 
 67 | def get_vendor_version_from_module(module_name: str) -> Optional[str]:
 68 |     module = get_module_from_module_name(module_name)
 69 |     version = getattr(module, "__version__", None)
 70 | 
 71 |     if module and not version:
 72 |         # Try to find version in debundled module info.
 73 |         assert module.__file__ is not None
 74 |         env = get_environment([os.path.dirname(module.__file__)])
 75 |         dist = env.get_distribution(module_name)
 76 |         if dist:
 77 |             version = str(dist.version)
 78 | 
 79 |     return version
 80 | 
 81 | 
 82 | def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None:
 83 |     """Log the actual version and print extra info if there is
 84 |     a conflict or if the actual version could not be imported.
 85 |     """
 86 |     for module_name, expected_version in vendor_txt_versions.items():
 87 |         extra_message = ""
 88 |         actual_version = get_vendor_version_from_module(module_name)
 89 |         if not actual_version:
 90 |             extra_message = (
 91 |                 " (Unable to locate actual module version, using"
 92 |                 " vendor.txt specified version)"
 93 |             )
 94 |             actual_version = expected_version
 95 |         elif parse_version(actual_version) != parse_version(expected_version):
 96 |             extra_message = (
 97 |                 " (CONFLICT: vendor.txt suggests version should"
 98 |                 f" be {expected_version})"
 99 |             )
100 |         logger.info("%s==%s%s", module_name, actual_version, extra_message)
101 | 
102 | 
103 | def show_vendor_versions() -> None:
104 |     logger.info("vendored library versions:")
105 | 
106 |     vendor_txt_versions = create_vendor_txt_map()
107 |     with indent_log():
108 |         show_actual_vendor_versions(vendor_txt_versions)
109 | 
110 | 
111 | def show_tags(options: Values) -> None:
112 |     tag_limit = 10
113 | 
114 |     target_python = make_target_python(options)
115 |     tags = target_python.get_sorted_tags()
116 | 
117 |     # Display the target options that were explicitly provided.
118 |     formatted_target = target_python.format_given()
119 |     suffix = ""
120 |     if formatted_target:
121 |         suffix = f" (target: {formatted_target})"
122 | 
123 |     msg = f"Compatible tags: {len(tags)}{suffix}"
124 |     logger.info(msg)
125 | 
126 |     if options.verbose < 1 and len(tags) > tag_limit:
127 |         tags_limited = True
128 |         tags = tags[:tag_limit]
129 |     else:
130 |         tags_limited = False
131 | 
132 |     with indent_log():
133 |         for tag in tags:
134 |             logger.info(str(tag))
135 | 
136 |         if tags_limited:
137 |             msg = f"...\n[First {tag_limit} tags shown. Pass --verbose to show all.]"
138 |             logger.info(msg)
139 | 
140 | 
141 | def ca_bundle_info(config: Configuration) -> str:
142 |     levels = {key.split(".", 1)[0] for key, _ in config.items()}
143 |     if not levels:
144 |         return "Not specified"
145 | 
146 |     levels_that_override_global = ["install", "wheel", "download"]
147 |     global_overriding_level = [
148 |         level for level in levels if level in levels_that_override_global
149 |     ]
150 |     if not global_overriding_level:
151 |         return "global"
152 | 
153 |     if "global" in levels:
154 |         levels.remove("global")
155 |     return ", ".join(levels)
156 | 
157 | 
158 | class DebugCommand(Command):
159 |     """
160 |     Display debug information.
161 |     """
162 | 
163 |     usage = """
164 |       %prog <options>"""
165 |     ignore_require_venv = True
166 | 
167 |     def add_options(self) -> None:
168 |         cmdoptions.add_target_python_options(self.cmd_opts)
169 |         self.parser.insert_option_group(0, self.cmd_opts)
170 |         self.parser.config.load()
171 | 
172 |     def run(self, options: Values, args: List[str]) -> int:
173 |         logger.warning(
174 |             "This command is only meant for debugging. "
175 |             "Do not use this with automation for parsing and getting these "
176 |             "details, since the output and options of this command may "
177 |             "change without notice."
178 |         )
179 |         show_value("pip version", get_pip_version())
180 |         show_value("sys.version", sys.version)
181 |         show_value("sys.executable", sys.executable)
182 |         show_value("sys.getdefaultencoding", sys.getdefaultencoding())
183 |         show_value("sys.getfilesystemencoding", sys.getfilesystemencoding())
184 |         show_value(
185 |             "locale.getpreferredencoding",
186 |             locale.getpreferredencoding(),
187 |         )
188 |         show_value("sys.platform", sys.platform)
189 |         show_sys_implementation()
190 | 
191 |         show_value("'cert' config value", ca_bundle_info(self.parser.config))
192 |         show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE"))
193 |         show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE"))
194 |         show_value("pip._vendor.certifi.where()", where())
195 |         show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED)
196 | 
197 |         show_vendor_versions()
198 | 
199 |         show_tags(options)
200 | 
201 |         return SUCCESS
202 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py:
--------------------------------------------------------------------------------

```python
  1 | """Logic that powers autocompletion installed by ``pip completion``.
  2 | """
  3 | 
  4 | import optparse
  5 | import os
  6 | import sys
  7 | from itertools import chain
  8 | from typing import Any, Iterable, List, Optional
  9 | 
 10 | from pip._internal.cli.main_parser import create_main_parser
 11 | from pip._internal.commands import commands_dict, create_command
 12 | from pip._internal.metadata import get_default_environment
 13 | 
 14 | 
 15 | def autocomplete() -> None:
 16 |     """Entry Point for completion of main and subcommand options."""
 17 |     # Don't complete if user hasn't sourced bash_completion file.
 18 |     if "PIP_AUTO_COMPLETE" not in os.environ:
 19 |         return
 20 |     # Don't complete if autocompletion environment variables
 21 |     # are not present
 22 |     if not os.environ.get("COMP_WORDS") or not os.environ.get("COMP_CWORD"):
 23 |         return
 24 |     cwords = os.environ["COMP_WORDS"].split()[1:]
 25 |     cword = int(os.environ["COMP_CWORD"])
 26 |     try:
 27 |         current = cwords[cword - 1]
 28 |     except IndexError:
 29 |         current = ""
 30 | 
 31 |     parser = create_main_parser()
 32 |     subcommands = list(commands_dict)
 33 |     options = []
 34 | 
 35 |     # subcommand
 36 |     subcommand_name: Optional[str] = None
 37 |     for word in cwords:
 38 |         if word in subcommands:
 39 |             subcommand_name = word
 40 |             break
 41 |     # subcommand options
 42 |     if subcommand_name is not None:
 43 |         # special case: 'help' subcommand has no options
 44 |         if subcommand_name == "help":
 45 |             sys.exit(1)
 46 |         # special case: list locally installed dists for show and uninstall
 47 |         should_list_installed = not current.startswith("-") and subcommand_name in [
 48 |             "show",
 49 |             "uninstall",
 50 |         ]
 51 |         if should_list_installed:
 52 |             env = get_default_environment()
 53 |             lc = current.lower()
 54 |             installed = [
 55 |                 dist.canonical_name
 56 |                 for dist in env.iter_installed_distributions(local_only=True)
 57 |                 if dist.canonical_name.startswith(lc)
 58 |                 and dist.canonical_name not in cwords[1:]
 59 |             ]
 60 |             # if there are no dists installed, fall back to option completion
 61 |             if installed:
 62 |                 for dist in installed:
 63 |                     print(dist)
 64 |                 sys.exit(1)
 65 | 
 66 |         should_list_installables = (
 67 |             not current.startswith("-") and subcommand_name == "install"
 68 |         )
 69 |         if should_list_installables:
 70 |             for path in auto_complete_paths(current, "path"):
 71 |                 print(path)
 72 |             sys.exit(1)
 73 | 
 74 |         subcommand = create_command(subcommand_name)
 75 | 
 76 |         for opt in subcommand.parser.option_list_all:
 77 |             if opt.help != optparse.SUPPRESS_HELP:
 78 |                 options += [
 79 |                     (opt_str, opt.nargs) for opt_str in opt._long_opts + opt._short_opts
 80 |                 ]
 81 | 
 82 |         # filter out previously specified options from available options
 83 |         prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
 84 |         options = [(x, v) for (x, v) in options if x not in prev_opts]
 85 |         # filter options by current input
 86 |         options = [(k, v) for k, v in options if k.startswith(current)]
 87 |         # get completion type given cwords and available subcommand options
 88 |         completion_type = get_path_completion_type(
 89 |             cwords,
 90 |             cword,
 91 |             subcommand.parser.option_list_all,
 92 |         )
 93 |         # get completion files and directories if ``completion_type`` is
 94 |         # ``<file>``, ``<dir>`` or ``<path>``
 95 |         if completion_type:
 96 |             paths = auto_complete_paths(current, completion_type)
 97 |             options = [(path, 0) for path in paths]
 98 |         for option in options:
 99 |             opt_label = option[0]
100 |             # append '=' to options which require args
101 |             if option[1] and option[0][:2] == "--":
102 |                 opt_label += "="
103 |             print(opt_label)
104 |     else:
105 |         # show main parser options only when necessary
106 | 
107 |         opts = [i.option_list for i in parser.option_groups]
108 |         opts.append(parser.option_list)
109 |         flattened_opts = chain.from_iterable(opts)
110 |         if current.startswith("-"):
111 |             for opt in flattened_opts:
112 |                 if opt.help != optparse.SUPPRESS_HELP:
113 |                     subcommands += opt._long_opts + opt._short_opts
114 |         else:
115 |             # get completion type given cwords and all available options
116 |             completion_type = get_path_completion_type(cwords, cword, flattened_opts)
117 |             if completion_type:
118 |                 subcommands = list(auto_complete_paths(current, completion_type))
119 | 
120 |         print(" ".join([x for x in subcommands if x.startswith(current)]))
121 |     sys.exit(1)
122 | 
123 | 
124 | def get_path_completion_type(
125 |     cwords: List[str], cword: int, opts: Iterable[Any]
126 | ) -> Optional[str]:
127 |     """Get the type of path completion (``file``, ``dir``, ``path`` or None)
128 | 
129 |     :param cwords: same as the environmental variable ``COMP_WORDS``
130 |     :param cword: same as the environmental variable ``COMP_CWORD``
131 |     :param opts: The available options to check
132 |     :return: path completion type (``file``, ``dir``, ``path`` or None)
133 |     """
134 |     if cword < 2 or not cwords[cword - 2].startswith("-"):
135 |         return None
136 |     for opt in opts:
137 |         if opt.help == optparse.SUPPRESS_HELP:
138 |             continue
139 |         for o in str(opt).split("/"):
140 |             if cwords[cword - 2].split("=")[0] == o:
141 |                 if not opt.metavar or any(
142 |                     x in ("path", "file", "dir") for x in opt.metavar.split("/")
143 |                 ):
144 |                     return opt.metavar
145 |     return None
146 | 
147 | 
148 | def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]:
149 |     """If ``completion_type`` is ``file`` or ``path``, list all regular files
150 |     and directories starting with ``current``; otherwise only list directories
151 |     starting with ``current``.
152 | 
153 |     :param current: The word to be completed
154 |     :param completion_type: path completion type(``file``, ``path`` or ``dir``)
155 |     :return: A generator of regular files and/or directories
156 |     """
157 |     directory, filename = os.path.split(current)
158 |     current_path = os.path.abspath(directory)
159 |     # Don't complete paths if they can't be accessed
160 |     if not os.access(current_path, os.R_OK):
161 |         return
162 |     filename = os.path.normcase(filename)
163 |     # list all files that start with ``filename``
164 |     file_list = (
165 |         x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename)
166 |     )
167 |     for f in file_list:
168 |         opt = os.path.join(current_path, f)
169 |         comp_file = os.path.normcase(os.path.join(directory, f))
170 |         # complete regular files when there is not ``<dir>`` after option
171 |         # complete directories when there is ``<file>``, ``<path>`` or
172 |         # ``<dir>``after option
173 |         if completion_type != "dir" and os.path.isfile(opt):
174 |             yield comp_file
175 |         elif os.path.isdir(opt):
176 |             yield os.path.join(comp_file, "")
177 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py:
--------------------------------------------------------------------------------

```python
  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
222 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxslt/extensions.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: interface for the extension support
  3 |  * Description: This provide the API needed for simple and module
  4 |  *              extension support.
  5 |  *
  6 |  * Copy: See Copyright for the status of this software.
  7 |  *
  8 |  * Author: Daniel Veillard
  9 |  */
 10 | 
 11 | #ifndef __XML_XSLT_EXTENSION_H__
 12 | #define __XML_XSLT_EXTENSION_H__
 13 | 
 14 | #include <libxml/xpath.h>
 15 | #include "xsltexports.h"
 16 | #include "xsltInternals.h"
 17 | 
 18 | #ifdef __cplusplus
 19 | extern "C" {
 20 | #endif
 21 | 
 22 | /**
 23 |  * Extension Modules API.
 24 |  */
 25 | 
 26 | /**
 27 |  * xsltInitGlobals:
 28 |  *
 29 |  * Initialize the global variables for extensions
 30 |  *
 31 |  */
 32 | 
 33 | XSLTPUBFUN void XSLTCALL
 34 | 		xsltInitGlobals                 (void);
 35 | 
 36 | /**
 37 |  * xsltStyleExtInitFunction:
 38 |  * @ctxt:  an XSLT stylesheet
 39 |  * @URI:  the namespace URI for the extension
 40 |  *
 41 |  * A function called at initialization time of an XSLT extension module.
 42 |  *
 43 |  * Returns a pointer to the module specific data for this transformation.
 44 |  */
 45 | typedef void * (*xsltStyleExtInitFunction)	(xsltStylesheetPtr style,
 46 | 						 const xmlChar *URI);
 47 | 
 48 | /**
 49 |  * xsltStyleExtShutdownFunction:
 50 |  * @ctxt:  an XSLT stylesheet
 51 |  * @URI:  the namespace URI for the extension
 52 |  * @data:  the data associated to this module
 53 |  *
 54 |  * A function called at shutdown time of an XSLT extension module.
 55 |  */
 56 | typedef void (*xsltStyleExtShutdownFunction)	(xsltStylesheetPtr style,
 57 | 						 const xmlChar *URI,
 58 | 						 void *data);
 59 | 
 60 | /**
 61 |  * xsltExtInitFunction:
 62 |  * @ctxt:  an XSLT transformation context
 63 |  * @URI:  the namespace URI for the extension
 64 |  *
 65 |  * A function called at initialization time of an XSLT extension module.
 66 |  *
 67 |  * Returns a pointer to the module specific data for this transformation.
 68 |  */
 69 | typedef void * (*xsltExtInitFunction)	(xsltTransformContextPtr ctxt,
 70 | 					 const xmlChar *URI);
 71 | 
 72 | /**
 73 |  * xsltExtShutdownFunction:
 74 |  * @ctxt:  an XSLT transformation context
 75 |  * @URI:  the namespace URI for the extension
 76 |  * @data:  the data associated to this module
 77 |  *
 78 |  * A function called at shutdown time of an XSLT extension module.
 79 |  */
 80 | typedef void (*xsltExtShutdownFunction) (xsltTransformContextPtr ctxt,
 81 | 					 const xmlChar *URI,
 82 | 					 void *data);
 83 | 
 84 | XSLTPUBFUN int XSLTCALL
 85 | 		xsltRegisterExtModule	(const xmlChar *URI,
 86 | 					 xsltExtInitFunction initFunc,
 87 | 					 xsltExtShutdownFunction shutdownFunc);
 88 | XSLTPUBFUN int XSLTCALL
 89 | 		xsltRegisterExtModuleFull
 90 | 					(const xmlChar * URI,
 91 | 					 xsltExtInitFunction initFunc,
 92 | 					 xsltExtShutdownFunction shutdownFunc,
 93 | 					 xsltStyleExtInitFunction styleInitFunc,
 94 | 					 xsltStyleExtShutdownFunction styleShutdownFunc);
 95 | 
 96 | XSLTPUBFUN int XSLTCALL
 97 | 		xsltUnregisterExtModule	(const xmlChar * URI);
 98 | 
 99 | XSLTPUBFUN void * XSLTCALL
100 | 		xsltGetExtData		(xsltTransformContextPtr ctxt,
101 | 					 const xmlChar *URI);
102 | 
103 | XSLTPUBFUN void * XSLTCALL
104 | 		xsltStyleGetExtData	(xsltStylesheetPtr style,
105 | 					 const xmlChar *URI);
106 | #ifdef XSLT_REFACTORED
107 | XSLTPUBFUN void * XSLTCALL
108 | 		xsltStyleStylesheetLevelGetExtData(
109 | 					 xsltStylesheetPtr style,
110 | 					 const xmlChar * URI);
111 | #endif
112 | XSLTPUBFUN void XSLTCALL
113 | 		xsltShutdownCtxtExts	(xsltTransformContextPtr ctxt);
114 | 
115 | XSLTPUBFUN void XSLTCALL
116 | 		xsltShutdownExts	(xsltStylesheetPtr style);
117 | 
118 | XSLTPUBFUN xsltTransformContextPtr XSLTCALL
119 | 		xsltXPathGetTransformContext
120 | 					(xmlXPathParserContextPtr ctxt);
121 | 
122 | /*
123 |  * extension functions
124 | */
125 | XSLTPUBFUN int XSLTCALL
126 | 		xsltRegisterExtModuleFunction
127 | 					(const xmlChar *name,
128 | 					 const xmlChar *URI,
129 | 					 xmlXPathFunction function);
130 | XSLTPUBFUN xmlXPathFunction XSLTCALL
131 | 	xsltExtModuleFunctionLookup	(const xmlChar *name,
132 | 					 const xmlChar *URI);
133 | XSLTPUBFUN int XSLTCALL
134 | 		xsltUnregisterExtModuleFunction
135 | 					(const xmlChar *name,
136 | 					 const xmlChar *URI);
137 | 
138 | /*
139 |  * extension elements
140 |  */
141 | typedef xsltElemPreCompPtr (*xsltPreComputeFunction)
142 | 					(xsltStylesheetPtr style,
143 | 					 xmlNodePtr inst,
144 | 					 xsltTransformFunction function);
145 | 
146 | XSLTPUBFUN xsltElemPreCompPtr XSLTCALL
147 | 		xsltNewElemPreComp	(xsltStylesheetPtr style,
148 | 					 xmlNodePtr inst,
149 | 					 xsltTransformFunction function);
150 | XSLTPUBFUN void XSLTCALL
151 | 		xsltInitElemPreComp	(xsltElemPreCompPtr comp,
152 | 					 xsltStylesheetPtr style,
153 | 					 xmlNodePtr inst,
154 | 					 xsltTransformFunction function,
155 | 					 xsltElemPreCompDeallocator freeFunc);
156 | 
157 | XSLTPUBFUN int XSLTCALL
158 | 		xsltRegisterExtModuleElement
159 | 					(const xmlChar *name,
160 | 					 const xmlChar *URI,
161 | 					 xsltPreComputeFunction precomp,
162 | 					 xsltTransformFunction transform);
163 | XSLTPUBFUN xsltTransformFunction XSLTCALL
164 | 		xsltExtElementLookup	(xsltTransformContextPtr ctxt,
165 | 					 const xmlChar *name,
166 | 					 const xmlChar *URI);
167 | XSLTPUBFUN xsltTransformFunction XSLTCALL
168 | 		xsltExtModuleElementLookup
169 | 					(const xmlChar *name,
170 | 					 const xmlChar *URI);
171 | XSLTPUBFUN xsltPreComputeFunction XSLTCALL
172 | 		xsltExtModuleElementPreComputeLookup
173 | 					(const xmlChar *name,
174 | 					 const xmlChar *URI);
175 | XSLTPUBFUN int XSLTCALL
176 | 		xsltUnregisterExtModuleElement
177 | 					(const xmlChar *name,
178 | 					 const xmlChar *URI);
179 | 
180 | /*
181 |  * top-level elements
182 |  */
183 | typedef void (*xsltTopLevelFunction)	(xsltStylesheetPtr style,
184 | 					 xmlNodePtr inst);
185 | 
186 | XSLTPUBFUN int XSLTCALL
187 | 		xsltRegisterExtModuleTopLevel
188 | 					(const xmlChar *name,
189 | 					 const xmlChar *URI,
190 | 					 xsltTopLevelFunction function);
191 | XSLTPUBFUN xsltTopLevelFunction XSLTCALL
192 | 		xsltExtModuleTopLevelLookup
193 | 					(const xmlChar *name,
194 | 					 const xmlChar *URI);
195 | XSLTPUBFUN int XSLTCALL
196 | 		xsltUnregisterExtModuleTopLevel
197 | 					(const xmlChar *name,
198 | 					 const xmlChar *URI);
199 | 
200 | 
201 | /* These 2 functions are deprecated for use within modules. */
202 | XSLTPUBFUN int XSLTCALL
203 | 		xsltRegisterExtFunction	(xsltTransformContextPtr ctxt,
204 | 					 const xmlChar *name,
205 | 					 const xmlChar *URI,
206 | 					 xmlXPathFunction function);
207 | XSLTPUBFUN int XSLTCALL
208 | 		xsltRegisterExtElement	(xsltTransformContextPtr ctxt,
209 | 					 const xmlChar *name,
210 | 					 const xmlChar *URI,
211 | 					 xsltTransformFunction function);
212 | 
213 | /*
214 |  * Extension Prefix handling API.
215 |  * Those are used by the XSLT (pre)processor.
216 |  */
217 | 
218 | XSLTPUBFUN int XSLTCALL
219 | 		xsltRegisterExtPrefix	(xsltStylesheetPtr style,
220 | 					 const xmlChar *prefix,
221 | 					 const xmlChar *URI);
222 | XSLTPUBFUN int XSLTCALL
223 | 		xsltCheckExtPrefix	(xsltStylesheetPtr style,
224 | 					 const xmlChar *URI);
225 | XSLTPUBFUN int XSLTCALL
226 | 		xsltCheckExtURI		(xsltStylesheetPtr style,
227 | 					 const xmlChar *URI);
228 | XSLTPUBFUN int XSLTCALL
229 | 		xsltInitCtxtExts	(xsltTransformContextPtr ctxt);
230 | XSLTPUBFUN void XSLTCALL
231 | 		xsltFreeCtxtExts	(xsltTransformContextPtr ctxt);
232 | XSLTPUBFUN void XSLTCALL
233 | 		xsltFreeExts		(xsltStylesheetPtr style);
234 | 
235 | XSLTPUBFUN xsltElemPreCompPtr XSLTCALL
236 | 		xsltPreComputeExtModuleElement
237 | 					(xsltStylesheetPtr style,
238 | 					 xmlNodePtr inst);
239 | /*
240 |  * Extension Infos access.
241 |  * Used by exslt initialisation
242 |  */
243 | 
244 | XSLTPUBFUN xmlHashTablePtr XSLTCALL
245 | 		xsltGetExtInfo		(xsltStylesheetPtr style,
246 | 					 const xmlChar *URI);
247 | 
248 | /**
249 |  * Test of the extension module API
250 |  */
251 | XSLTPUBFUN void XSLTCALL
252 | 		xsltRegisterTestModule	(void);
253 | XSLTPUBFUN void XSLTCALL
254 | 		xsltDebugDumpExtensions	(FILE * output);
255 | 
256 | 
257 | #ifdef __cplusplus
258 | }
259 | #endif
260 | 
261 | #endif /* __XML_XSLT_EXTENSION_H__ */
262 | 
263 | 
```
Page 23/168FirstPrevNextLast