#
tokens: 47088/50000 4/808 files (page 47/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 47 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/idna/core.py:
--------------------------------------------------------------------------------

```python
  1 | from . import idnadata
  2 | import bisect
  3 | import unicodedata
  4 | import re
  5 | from typing import Union, Optional
  6 | from .intranges import intranges_contain
  7 | 
  8 | _virama_combining_class = 9
  9 | _alabel_prefix = b'xn--'
 10 | _unicode_dots_re = re.compile('[\u002e\u3002\uff0e\uff61]')
 11 | 
 12 | class IDNAError(UnicodeError):
 13 |     """ Base exception for all IDNA-encoding related problems """
 14 |     pass
 15 | 
 16 | 
 17 | class IDNABidiError(IDNAError):
 18 |     """ Exception when bidirectional requirements are not satisfied """
 19 |     pass
 20 | 
 21 | 
 22 | class InvalidCodepoint(IDNAError):
 23 |     """ Exception when a disallowed or unallocated codepoint is used """
 24 |     pass
 25 | 
 26 | 
 27 | class InvalidCodepointContext(IDNAError):
 28 |     """ Exception when the codepoint is not valid in the context it is used """
 29 |     pass
 30 | 
 31 | 
 32 | def _combining_class(cp: int) -> int:
 33 |     v = unicodedata.combining(chr(cp))
 34 |     if v == 0:
 35 |         if not unicodedata.name(chr(cp)):
 36 |             raise ValueError('Unknown character in unicodedata')
 37 |     return v
 38 | 
 39 | def _is_script(cp: str, script: str) -> bool:
 40 |     return intranges_contain(ord(cp), idnadata.scripts[script])
 41 | 
 42 | def _punycode(s: str) -> bytes:
 43 |     return s.encode('punycode')
 44 | 
 45 | def _unot(s: int) -> str:
 46 |     return 'U+{:04X}'.format(s)
 47 | 
 48 | 
 49 | def valid_label_length(label: Union[bytes, str]) -> bool:
 50 |     if len(label) > 63:
 51 |         return False
 52 |     return True
 53 | 
 54 | 
 55 | def valid_string_length(label: Union[bytes, str], trailing_dot: bool) -> bool:
 56 |     if len(label) > (254 if trailing_dot else 253):
 57 |         return False
 58 |     return True
 59 | 
 60 | 
 61 | def check_bidi(label: str, check_ltr: bool = False) -> bool:
 62 |     # Bidi rules should only be applied if string contains RTL characters
 63 |     bidi_label = False
 64 |     for (idx, cp) in enumerate(label, 1):
 65 |         direction = unicodedata.bidirectional(cp)
 66 |         if direction == '':
 67 |             # String likely comes from a newer version of Unicode
 68 |             raise IDNABidiError('Unknown directionality in label {} at position {}'.format(repr(label), idx))
 69 |         if direction in ['R', 'AL', 'AN']:
 70 |             bidi_label = True
 71 |     if not bidi_label and not check_ltr:
 72 |         return True
 73 | 
 74 |     # Bidi rule 1
 75 |     direction = unicodedata.bidirectional(label[0])
 76 |     if direction in ['R', 'AL']:
 77 |         rtl = True
 78 |     elif direction == 'L':
 79 |         rtl = False
 80 |     else:
 81 |         raise IDNABidiError('First codepoint in label {} must be directionality L, R or AL'.format(repr(label)))
 82 | 
 83 |     valid_ending = False
 84 |     number_type = None  # type: Optional[str]
 85 |     for (idx, cp) in enumerate(label, 1):
 86 |         direction = unicodedata.bidirectional(cp)
 87 | 
 88 |         if rtl:
 89 |             # Bidi rule 2
 90 |             if not direction in ['R', 'AL', 'AN', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
 91 |                 raise IDNABidiError('Invalid direction for codepoint at position {} in a right-to-left label'.format(idx))
 92 |             # Bidi rule 3
 93 |             if direction in ['R', 'AL', 'EN', 'AN']:
 94 |                 valid_ending = True
 95 |             elif direction != 'NSM':
 96 |                 valid_ending = False
 97 |             # Bidi rule 4
 98 |             if direction in ['AN', 'EN']:
 99 |                 if not number_type:
100 |                     number_type = direction
101 |                 else:
102 |                     if number_type != direction:
103 |                         raise IDNABidiError('Can not mix numeral types in a right-to-left label')
104 |         else:
105 |             # Bidi rule 5
106 |             if not direction in ['L', 'EN', 'ES', 'CS', 'ET', 'ON', 'BN', 'NSM']:
107 |                 raise IDNABidiError('Invalid direction for codepoint at position {} in a left-to-right label'.format(idx))
108 |             # Bidi rule 6
109 |             if direction in ['L', 'EN']:
110 |                 valid_ending = True
111 |             elif direction != 'NSM':
112 |                 valid_ending = False
113 | 
114 |     if not valid_ending:
115 |         raise IDNABidiError('Label ends with illegal codepoint directionality')
116 | 
117 |     return True
118 | 
119 | 
120 | def check_initial_combiner(label: str) -> bool:
121 |     if unicodedata.category(label[0])[0] == 'M':
122 |         raise IDNAError('Label begins with an illegal combining character')
123 |     return True
124 | 
125 | 
126 | def check_hyphen_ok(label: str) -> bool:
127 |     if label[2:4] == '--':
128 |         raise IDNAError('Label has disallowed hyphens in 3rd and 4th position')
129 |     if label[0] == '-' or label[-1] == '-':
130 |         raise IDNAError('Label must not start or end with a hyphen')
131 |     return True
132 | 
133 | 
134 | def check_nfc(label: str) -> None:
135 |     if unicodedata.normalize('NFC', label) != label:
136 |         raise IDNAError('Label must be in Normalization Form C')
137 | 
138 | 
139 | def valid_contextj(label: str, pos: int) -> bool:
140 |     cp_value = ord(label[pos])
141 | 
142 |     if cp_value == 0x200c:
143 | 
144 |         if pos > 0:
145 |             if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
146 |                 return True
147 | 
148 |         ok = False
149 |         for i in range(pos-1, -1, -1):
150 |             joining_type = idnadata.joining_types.get(ord(label[i]))
151 |             if joining_type == ord('T'):
152 |                 continue
153 |             elif joining_type in [ord('L'), ord('D')]:
154 |                 ok = True
155 |                 break
156 |             else:
157 |                 break
158 | 
159 |         if not ok:
160 |             return False
161 | 
162 |         ok = False
163 |         for i in range(pos+1, len(label)):
164 |             joining_type = idnadata.joining_types.get(ord(label[i]))
165 |             if joining_type == ord('T'):
166 |                 continue
167 |             elif joining_type in [ord('R'), ord('D')]:
168 |                 ok = True
169 |                 break
170 |             else:
171 |                 break
172 |         return ok
173 | 
174 |     if cp_value == 0x200d:
175 | 
176 |         if pos > 0:
177 |             if _combining_class(ord(label[pos - 1])) == _virama_combining_class:
178 |                 return True
179 |         return False
180 | 
181 |     else:
182 | 
183 |         return False
184 | 
185 | 
186 | def valid_contexto(label: str, pos: int, exception: bool = False) -> bool:
187 |     cp_value = ord(label[pos])
188 | 
189 |     if cp_value == 0x00b7:
190 |         if 0 < pos < len(label)-1:
191 |             if ord(label[pos - 1]) == 0x006c and ord(label[pos + 1]) == 0x006c:
192 |                 return True
193 |         return False
194 | 
195 |     elif cp_value == 0x0375:
196 |         if pos < len(label)-1 and len(label) > 1:
197 |             return _is_script(label[pos + 1], 'Greek')
198 |         return False
199 | 
200 |     elif cp_value == 0x05f3 or cp_value == 0x05f4:
201 |         if pos > 0:
202 |             return _is_script(label[pos - 1], 'Hebrew')
203 |         return False
204 | 
205 |     elif cp_value == 0x30fb:
206 |         for cp in label:
207 |             if cp == '\u30fb':
208 |                 continue
209 |             if _is_script(cp, 'Hiragana') or _is_script(cp, 'Katakana') or _is_script(cp, 'Han'):
210 |                 return True
211 |         return False
212 | 
213 |     elif 0x660 <= cp_value <= 0x669:
214 |         for cp in label:
215 |             if 0x6f0 <= ord(cp) <= 0x06f9:
216 |                 return False
217 |         return True
218 | 
219 |     elif 0x6f0 <= cp_value <= 0x6f9:
220 |         for cp in label:
221 |             if 0x660 <= ord(cp) <= 0x0669:
222 |                 return False
223 |         return True
224 | 
225 |     return False
226 | 
227 | 
228 | def check_label(label: Union[str, bytes, bytearray]) -> None:
229 |     if isinstance(label, (bytes, bytearray)):
230 |         label = label.decode('utf-8')
231 |     if len(label) == 0:
232 |         raise IDNAError('Empty Label')
233 | 
234 |     check_nfc(label)
235 |     check_hyphen_ok(label)
236 |     check_initial_combiner(label)
237 | 
238 |     for (pos, cp) in enumerate(label):
239 |         cp_value = ord(cp)
240 |         if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']):
241 |             continue
242 |         elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']):
243 |             if not valid_contextj(label, pos):
244 |                 raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format(
245 |                     _unot(cp_value), pos+1, repr(label)))
246 |         elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']):
247 |             if not valid_contexto(label, pos):
248 |                 raise InvalidCodepointContext('Codepoint {} not allowed at position {} in {}'.format(_unot(cp_value), pos+1, repr(label)))
249 |         else:
250 |             raise InvalidCodepoint('Codepoint {} at position {} of {} not allowed'.format(_unot(cp_value), pos+1, repr(label)))
251 | 
252 |     check_bidi(label)
253 | 
254 | 
255 | def alabel(label: str) -> bytes:
256 |     try:
257 |         label_bytes = label.encode('ascii')
258 |         ulabel(label_bytes)
259 |         if not valid_label_length(label_bytes):
260 |             raise IDNAError('Label too long')
261 |         return label_bytes
262 |     except UnicodeEncodeError:
263 |         pass
264 | 
265 |     check_label(label)
266 |     label_bytes = _alabel_prefix + _punycode(label)
267 | 
268 |     if not valid_label_length(label_bytes):
269 |         raise IDNAError('Label too long')
270 | 
271 |     return label_bytes
272 | 
273 | 
274 | def ulabel(label: Union[str, bytes, bytearray]) -> str:
275 |     if not isinstance(label, (bytes, bytearray)):
276 |         try:
277 |             label_bytes = label.encode('ascii')
278 |         except UnicodeEncodeError:
279 |             check_label(label)
280 |             return label
281 |     else:
282 |         label_bytes = label
283 | 
284 |     label_bytes = label_bytes.lower()
285 |     if label_bytes.startswith(_alabel_prefix):
286 |         label_bytes = label_bytes[len(_alabel_prefix):]
287 |         if not label_bytes:
288 |             raise IDNAError('Malformed A-label, no Punycode eligible content found')
289 |         if label_bytes.decode('ascii')[-1] == '-':
290 |             raise IDNAError('A-label must not end with a hyphen')
291 |     else:
292 |         check_label(label_bytes)
293 |         return label_bytes.decode('ascii')
294 | 
295 |     try:
296 |         label = label_bytes.decode('punycode')
297 |     except UnicodeError:
298 |         raise IDNAError('Invalid A-label')
299 |     check_label(label)
300 |     return label
301 | 
302 | 
303 | def uts46_remap(domain: str, std3_rules: bool = True, transitional: bool = False) -> str:
304 |     """Re-map the characters in the string according to UTS46 processing."""
305 |     from .uts46data import uts46data
306 |     output = ''
307 | 
308 |     for pos, char in enumerate(domain):
309 |         code_point = ord(char)
310 |         try:
311 |             uts46row = uts46data[code_point if code_point < 256 else
312 |                 bisect.bisect_left(uts46data, (code_point, 'Z')) - 1]
313 |             status = uts46row[1]
314 |             replacement = None  # type: Optional[str]
315 |             if len(uts46row) == 3:
316 |                 replacement = uts46row[2]
317 |             if (status == 'V' or
318 |                     (status == 'D' and not transitional) or
319 |                     (status == '3' and not std3_rules and replacement is None)):
320 |                 output += char
321 |             elif replacement is not None and (status == 'M' or
322 |                     (status == '3' and not std3_rules) or
323 |                     (status == 'D' and transitional)):
324 |                 output += replacement
325 |             elif status != 'I':
326 |                 raise IndexError()
327 |         except IndexError:
328 |             raise InvalidCodepoint(
329 |                 'Codepoint {} not allowed at position {} in {}'.format(
330 |                 _unot(code_point), pos + 1, repr(domain)))
331 | 
332 |     return unicodedata.normalize('NFC', output)
333 | 
334 | 
335 | def encode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False, transitional: bool = False) -> bytes:
336 |     if not isinstance(s, str):
337 |         try:
338 |             s = str(s, 'ascii')
339 |         except UnicodeDecodeError:
340 |             raise IDNAError('should pass a unicode string to the function rather than a byte string.')
341 |     if uts46:
342 |         s = uts46_remap(s, std3_rules, transitional)
343 |     trailing_dot = False
344 |     result = []
345 |     if strict:
346 |         labels = s.split('.')
347 |     else:
348 |         labels = _unicode_dots_re.split(s)
349 |     if not labels or labels == ['']:
350 |         raise IDNAError('Empty domain')
351 |     if labels[-1] == '':
352 |         del labels[-1]
353 |         trailing_dot = True
354 |     for label in labels:
355 |         s = alabel(label)
356 |         if s:
357 |             result.append(s)
358 |         else:
359 |             raise IDNAError('Empty label')
360 |     if trailing_dot:
361 |         result.append(b'')
362 |     s = b'.'.join(result)
363 |     if not valid_string_length(s, trailing_dot):
364 |         raise IDNAError('Domain too long')
365 |     return s
366 | 
367 | 
368 | def decode(s: Union[str, bytes, bytearray], strict: bool = False, uts46: bool = False, std3_rules: bool = False) -> str:
369 |     try:
370 |         if not isinstance(s, str):
371 |             s = str(s, 'ascii')
372 |     except UnicodeDecodeError:
373 |         raise IDNAError('Invalid ASCII in A-label')
374 |     if uts46:
375 |         s = uts46_remap(s, std3_rules, False)
376 |     trailing_dot = False
377 |     result = []
378 |     if not strict:
379 |         labels = _unicode_dots_re.split(s)
380 |     else:
381 |         labels = s.split('.')
382 |     if not labels or labels == ['']:
383 |         raise IDNAError('Empty domain')
384 |     if not labels[-1]:
385 |         del labels[-1]
386 |         trailing_dot = True
387 |     for label in labels:
388 |         s = ulabel(label)
389 |         if s:
390 |             result.append(s)
391 |         else:
392 |             raise IDNAError('Empty label')
393 |     if trailing_dot:
394 |         result.append('')
395 |     return '.'.join(result)
396 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/urllib3/http2/connection.py:
--------------------------------------------------------------------------------

```python
  1 | from __future__ import annotations
  2 | 
  3 | import logging
  4 | import re
  5 | import threading
  6 | import types
  7 | import typing
  8 | 
  9 | import h2.config  # type: ignore[import-untyped]
 10 | import h2.connection  # type: ignore[import-untyped]
 11 | import h2.events  # type: ignore[import-untyped]
 12 | 
 13 | from .._base_connection import _TYPE_BODY
 14 | from .._collections import HTTPHeaderDict
 15 | from ..connection import HTTPSConnection, _get_default_user_agent
 16 | from ..exceptions import ConnectionError
 17 | from ..response import BaseHTTPResponse
 18 | 
 19 | orig_HTTPSConnection = HTTPSConnection
 20 | 
 21 | T = typing.TypeVar("T")
 22 | 
 23 | log = logging.getLogger(__name__)
 24 | 
 25 | RE_IS_LEGAL_HEADER_NAME = re.compile(rb"^[!#$%&'*+\-.^_`|~0-9a-z]+$")
 26 | RE_IS_ILLEGAL_HEADER_VALUE = re.compile(rb"[\0\x00\x0a\x0d\r\n]|^[ \r\n\t]|[ \r\n\t]$")
 27 | 
 28 | 
 29 | def _is_legal_header_name(name: bytes) -> bool:
 30 |     """
 31 |     "An implementation that validates fields according to the definitions in Sections
 32 |     5.1 and 5.5 of [HTTP] only needs an additional check that field names do not
 33 |     include uppercase characters." (https://httpwg.org/specs/rfc9113.html#n-field-validity)
 34 | 
 35 |     `http.client._is_legal_header_name` does not validate the field name according to the
 36 |     HTTP 1.1 spec, so we do that here, in addition to checking for uppercase characters.
 37 | 
 38 |     This does not allow for the `:` character in the header name, so should not
 39 |     be used to validate pseudo-headers.
 40 |     """
 41 |     return bool(RE_IS_LEGAL_HEADER_NAME.match(name))
 42 | 
 43 | 
 44 | def _is_illegal_header_value(value: bytes) -> bool:
 45 |     """
 46 |     "A field value MUST NOT contain the zero value (ASCII NUL, 0x00), line feed
 47 |     (ASCII LF, 0x0a), or carriage return (ASCII CR, 0x0d) at any position. A field
 48 |     value MUST NOT start or end with an ASCII whitespace character (ASCII SP or HTAB,
 49 |     0x20 or 0x09)." (https://httpwg.org/specs/rfc9113.html#n-field-validity)
 50 |     """
 51 |     return bool(RE_IS_ILLEGAL_HEADER_VALUE.search(value))
 52 | 
 53 | 
 54 | class _LockedObject(typing.Generic[T]):
 55 |     """
 56 |     A wrapper class that hides a specific object behind a lock.
 57 |     The goal here is to provide a simple way to protect access to an object
 58 |     that cannot safely be simultaneously accessed from multiple threads. The
 59 |     intended use of this class is simple: take hold of it with a context
 60 |     manager, which returns the protected object.
 61 |     """
 62 | 
 63 |     __slots__ = (
 64 |         "lock",
 65 |         "_obj",
 66 |     )
 67 | 
 68 |     def __init__(self, obj: T):
 69 |         self.lock = threading.RLock()
 70 |         self._obj = obj
 71 | 
 72 |     def __enter__(self) -> T:
 73 |         self.lock.acquire()
 74 |         return self._obj
 75 | 
 76 |     def __exit__(
 77 |         self,
 78 |         exc_type: type[BaseException] | None,
 79 |         exc_val: BaseException | None,
 80 |         exc_tb: types.TracebackType | None,
 81 |     ) -> None:
 82 |         self.lock.release()
 83 | 
 84 | 
 85 | class HTTP2Connection(HTTPSConnection):
 86 |     def __init__(
 87 |         self, host: str, port: int | None = None, **kwargs: typing.Any
 88 |     ) -> None:
 89 |         self._h2_conn = self._new_h2_conn()
 90 |         self._h2_stream: int | None = None
 91 |         self._headers: list[tuple[bytes, bytes]] = []
 92 | 
 93 |         if "proxy" in kwargs or "proxy_config" in kwargs:  # Defensive:
 94 |             raise NotImplementedError("Proxies aren't supported with HTTP/2")
 95 | 
 96 |         super().__init__(host, port, **kwargs)
 97 | 
 98 |         if self._tunnel_host is not None:
 99 |             raise NotImplementedError("Tunneling isn't supported with HTTP/2")
100 | 
101 |     def _new_h2_conn(self) -> _LockedObject[h2.connection.H2Connection]:
102 |         config = h2.config.H2Configuration(client_side=True)
103 |         return _LockedObject(h2.connection.H2Connection(config=config))
104 | 
105 |     def connect(self) -> None:
106 |         super().connect()
107 |         with self._h2_conn as conn:
108 |             conn.initiate_connection()
109 |             if data_to_send := conn.data_to_send():
110 |                 self.sock.sendall(data_to_send)
111 | 
112 |     def putrequest(  # type: ignore[override]
113 |         self,
114 |         method: str,
115 |         url: str,
116 |         **kwargs: typing.Any,
117 |     ) -> None:
118 |         """putrequest
119 |         This deviates from the HTTPConnection method signature since we never need to override
120 |         sending accept-encoding headers or the host header.
121 |         """
122 |         if "skip_host" in kwargs:
123 |             raise NotImplementedError("`skip_host` isn't supported")
124 |         if "skip_accept_encoding" in kwargs:
125 |             raise NotImplementedError("`skip_accept_encoding` isn't supported")
126 | 
127 |         self._request_url = url or "/"
128 |         self._validate_path(url)  # type: ignore[attr-defined]
129 | 
130 |         if ":" in self.host:
131 |             authority = f"[{self.host}]:{self.port or 443}"
132 |         else:
133 |             authority = f"{self.host}:{self.port or 443}"
134 | 
135 |         self._headers.append((b":scheme", b"https"))
136 |         self._headers.append((b":method", method.encode()))
137 |         self._headers.append((b":authority", authority.encode()))
138 |         self._headers.append((b":path", url.encode()))
139 | 
140 |         with self._h2_conn as conn:
141 |             self._h2_stream = conn.get_next_available_stream_id()
142 | 
143 |     def putheader(self, header: str | bytes, *values: str | bytes) -> None:
144 |         # TODO SKIPPABLE_HEADERS from urllib3 are ignored.
145 |         header = header.encode() if isinstance(header, str) else header
146 |         header = header.lower()  # A lot of upstream code uses capitalized headers.
147 |         if not _is_legal_header_name(header):
148 |             raise ValueError(f"Illegal header name {str(header)}")
149 | 
150 |         for value in values:
151 |             value = value.encode() if isinstance(value, str) else value
152 |             if _is_illegal_header_value(value):
153 |                 raise ValueError(f"Illegal header value {str(value)}")
154 |             self._headers.append((header, value))
155 | 
156 |     def endheaders(self, message_body: typing.Any = None) -> None:  # type: ignore[override]
157 |         if self._h2_stream is None:
158 |             raise ConnectionError("Must call `putrequest` first.")
159 | 
160 |         with self._h2_conn as conn:
161 |             conn.send_headers(
162 |                 stream_id=self._h2_stream,
163 |                 headers=self._headers,
164 |                 end_stream=(message_body is None),
165 |             )
166 |             if data_to_send := conn.data_to_send():
167 |                 self.sock.sendall(data_to_send)
168 |         self._headers = []  # Reset headers for the next request.
169 | 
170 |     def send(self, data: typing.Any) -> None:
171 |         """Send data to the server.
172 |         `data` can be: `str`, `bytes`, an iterable, or file-like objects
173 |         that support a .read() method.
174 |         """
175 |         if self._h2_stream is None:
176 |             raise ConnectionError("Must call `putrequest` first.")
177 | 
178 |         with self._h2_conn as conn:
179 |             if data_to_send := conn.data_to_send():
180 |                 self.sock.sendall(data_to_send)
181 | 
182 |             if hasattr(data, "read"):  # file-like objects
183 |                 while True:
184 |                     chunk = data.read(self.blocksize)
185 |                     if not chunk:
186 |                         break
187 |                     if isinstance(chunk, str):
188 |                         chunk = chunk.encode()  # pragma: no cover
189 |                     conn.send_data(self._h2_stream, chunk, end_stream=False)
190 |                     if data_to_send := conn.data_to_send():
191 |                         self.sock.sendall(data_to_send)
192 |                 conn.end_stream(self._h2_stream)
193 |                 return
194 | 
195 |             if isinstance(data, str):  # str -> bytes
196 |                 data = data.encode()
197 | 
198 |             try:
199 |                 if isinstance(data, bytes):
200 |                     conn.send_data(self._h2_stream, data, end_stream=True)
201 |                     if data_to_send := conn.data_to_send():
202 |                         self.sock.sendall(data_to_send)
203 |                 else:
204 |                     for chunk in data:
205 |                         conn.send_data(self._h2_stream, chunk, end_stream=False)
206 |                         if data_to_send := conn.data_to_send():
207 |                             self.sock.sendall(data_to_send)
208 |                     conn.end_stream(self._h2_stream)
209 |             except TypeError:
210 |                 raise TypeError(
211 |                     "`data` should be str, bytes, iterable, or file. got %r"
212 |                     % type(data)
213 |                 )
214 | 
215 |     def set_tunnel(
216 |         self,
217 |         host: str,
218 |         port: int | None = None,
219 |         headers: typing.Mapping[str, str] | None = None,
220 |         scheme: str = "http",
221 |     ) -> None:
222 |         raise NotImplementedError(
223 |             "HTTP/2 does not support setting up a tunnel through a proxy"
224 |         )
225 | 
226 |     def getresponse(  # type: ignore[override]
227 |         self,
228 |     ) -> HTTP2Response:
229 |         status = None
230 |         data = bytearray()
231 |         with self._h2_conn as conn:
232 |             end_stream = False
233 |             while not end_stream:
234 |                 # TODO: Arbitrary read value.
235 |                 if received_data := self.sock.recv(65535):
236 |                     events = conn.receive_data(received_data)
237 |                     for event in events:
238 |                         if isinstance(event, h2.events.ResponseReceived):
239 |                             headers = HTTPHeaderDict()
240 |                             for header, value in event.headers:
241 |                                 if header == b":status":
242 |                                     status = int(value.decode())
243 |                                 else:
244 |                                     headers.add(
245 |                                         header.decode("ascii"), value.decode("ascii")
246 |                                     )
247 | 
248 |                         elif isinstance(event, h2.events.DataReceived):
249 |                             data += event.data
250 |                             conn.acknowledge_received_data(
251 |                                 event.flow_controlled_length, event.stream_id
252 |                             )
253 | 
254 |                         elif isinstance(event, h2.events.StreamEnded):
255 |                             end_stream = True
256 | 
257 |                 if data_to_send := conn.data_to_send():
258 |                     self.sock.sendall(data_to_send)
259 | 
260 |         assert status is not None
261 |         return HTTP2Response(
262 |             status=status,
263 |             headers=headers,
264 |             request_url=self._request_url,
265 |             data=bytes(data),
266 |         )
267 | 
268 |     def request(  # type: ignore[override]
269 |         self,
270 |         method: str,
271 |         url: str,
272 |         body: _TYPE_BODY | None = None,
273 |         headers: typing.Mapping[str, str] | None = None,
274 |         *,
275 |         preload_content: bool = True,
276 |         decode_content: bool = True,
277 |         enforce_content_length: bool = True,
278 |         **kwargs: typing.Any,
279 |     ) -> None:
280 |         """Send an HTTP/2 request"""
281 |         if "chunked" in kwargs:
282 |             # TODO this is often present from upstream.
283 |             # raise NotImplementedError("`chunked` isn't supported with HTTP/2")
284 |             pass
285 | 
286 |         if self.sock is not None:
287 |             self.sock.settimeout(self.timeout)
288 | 
289 |         self.putrequest(method, url)
290 | 
291 |         headers = headers or {}
292 |         for k, v in headers.items():
293 |             if k.lower() == "transfer-encoding" and v == "chunked":
294 |                 continue
295 |             else:
296 |                 self.putheader(k, v)
297 | 
298 |         if b"user-agent" not in dict(self._headers):
299 |             self.putheader(b"user-agent", _get_default_user_agent())
300 | 
301 |         if body:
302 |             self.endheaders(message_body=body)
303 |             self.send(body)
304 |         else:
305 |             self.endheaders()
306 | 
307 |     def close(self) -> None:
308 |         with self._h2_conn as conn:
309 |             try:
310 |                 conn.close_connection()
311 |                 if data := conn.data_to_send():
312 |                     self.sock.sendall(data)
313 |             except Exception:
314 |                 pass
315 | 
316 |         # Reset all our HTTP/2 connection state.
317 |         self._h2_conn = self._new_h2_conn()
318 |         self._h2_stream = None
319 |         self._headers = []
320 | 
321 |         super().close()
322 | 
323 | 
324 | class HTTP2Response(BaseHTTPResponse):
325 |     # TODO: This is a woefully incomplete response object, but works for non-streaming.
326 |     def __init__(
327 |         self,
328 |         status: int,
329 |         headers: HTTPHeaderDict,
330 |         request_url: str,
331 |         data: bytes,
332 |         decode_content: bool = False,  # TODO: support decoding
333 |     ) -> None:
334 |         super().__init__(
335 |             status=status,
336 |             headers=headers,
337 |             # Following CPython, we map HTTP versions to major * 10 + minor integers
338 |             version=20,
339 |             version_string="HTTP/2",
340 |             # No reason phrase in HTTP/2
341 |             reason=None,
342 |             decode_content=decode_content,
343 |             request_url=request_url,
344 |         )
345 |         self._data = data
346 |         self.length_remaining = 0
347 | 
348 |     @property
349 |     def data(self) -> bytes:
350 |         return self._data
351 | 
352 |     def get_redirect_location(self) -> None:
353 |         return None
354 | 
355 |     def close(self) -> None:
356 |         pass
357 | 
```

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

```python
  1 | import json
  2 | import logging
  3 | from optparse import Values
  4 | from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast
  5 | 
  6 | from pip._vendor.packaging.utils import canonicalize_name
  7 | from pip._vendor.packaging.version import Version
  8 | 
  9 | from pip._internal.cli import cmdoptions
 10 | from pip._internal.cli.index_command import IndexGroupCommand
 11 | from pip._internal.cli.status_codes import SUCCESS
 12 | from pip._internal.exceptions import CommandError
 13 | from pip._internal.metadata import BaseDistribution, get_environment
 14 | from pip._internal.models.selection_prefs import SelectionPreferences
 15 | from pip._internal.utils.compat import stdlib_pkgs
 16 | from pip._internal.utils.misc import tabulate, write_output
 17 | 
 18 | if TYPE_CHECKING:
 19 |     from pip._internal.index.package_finder import PackageFinder
 20 |     from pip._internal.network.session import PipSession
 21 | 
 22 |     class _DistWithLatestInfo(BaseDistribution):
 23 |         """Give the distribution object a couple of extra fields.
 24 | 
 25 |         These will be populated during ``get_outdated()``. This is dirty but
 26 |         makes the rest of the code much cleaner.
 27 |         """
 28 | 
 29 |         latest_version: Version
 30 |         latest_filetype: str
 31 | 
 32 |     _ProcessedDists = Sequence[_DistWithLatestInfo]
 33 | 
 34 | 
 35 | logger = logging.getLogger(__name__)
 36 | 
 37 | 
 38 | class ListCommand(IndexGroupCommand):
 39 |     """
 40 |     List installed packages, including editables.
 41 | 
 42 |     Packages are listed in a case-insensitive sorted order.
 43 |     """
 44 | 
 45 |     ignore_require_venv = True
 46 |     usage = """
 47 |       %prog [options]"""
 48 | 
 49 |     def add_options(self) -> None:
 50 |         self.cmd_opts.add_option(
 51 |             "-o",
 52 |             "--outdated",
 53 |             action="store_true",
 54 |             default=False,
 55 |             help="List outdated packages",
 56 |         )
 57 |         self.cmd_opts.add_option(
 58 |             "-u",
 59 |             "--uptodate",
 60 |             action="store_true",
 61 |             default=False,
 62 |             help="List uptodate packages",
 63 |         )
 64 |         self.cmd_opts.add_option(
 65 |             "-e",
 66 |             "--editable",
 67 |             action="store_true",
 68 |             default=False,
 69 |             help="List editable projects.",
 70 |         )
 71 |         self.cmd_opts.add_option(
 72 |             "-l",
 73 |             "--local",
 74 |             action="store_true",
 75 |             default=False,
 76 |             help=(
 77 |                 "If in a virtualenv that has global access, do not list "
 78 |                 "globally-installed packages."
 79 |             ),
 80 |         )
 81 |         self.cmd_opts.add_option(
 82 |             "--user",
 83 |             dest="user",
 84 |             action="store_true",
 85 |             default=False,
 86 |             help="Only output packages installed in user-site.",
 87 |         )
 88 |         self.cmd_opts.add_option(cmdoptions.list_path())
 89 |         self.cmd_opts.add_option(
 90 |             "--pre",
 91 |             action="store_true",
 92 |             default=False,
 93 |             help=(
 94 |                 "Include pre-release and development versions. By default, "
 95 |                 "pip only finds stable versions."
 96 |             ),
 97 |         )
 98 | 
 99 |         self.cmd_opts.add_option(
100 |             "--format",
101 |             action="store",
102 |             dest="list_format",
103 |             default="columns",
104 |             choices=("columns", "freeze", "json"),
105 |             help=(
106 |                 "Select the output format among: columns (default), freeze, or json. "
107 |                 "The 'freeze' format cannot be used with the --outdated option."
108 |             ),
109 |         )
110 | 
111 |         self.cmd_opts.add_option(
112 |             "--not-required",
113 |             action="store_true",
114 |             dest="not_required",
115 |             help="List packages that are not dependencies of installed packages.",
116 |         )
117 | 
118 |         self.cmd_opts.add_option(
119 |             "--exclude-editable",
120 |             action="store_false",
121 |             dest="include_editable",
122 |             help="Exclude editable package from output.",
123 |         )
124 |         self.cmd_opts.add_option(
125 |             "--include-editable",
126 |             action="store_true",
127 |             dest="include_editable",
128 |             help="Include editable package from output.",
129 |             default=True,
130 |         )
131 |         self.cmd_opts.add_option(cmdoptions.list_exclude())
132 |         index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser)
133 | 
134 |         self.parser.insert_option_group(0, index_opts)
135 |         self.parser.insert_option_group(0, self.cmd_opts)
136 | 
137 |     def handle_pip_version_check(self, options: Values) -> None:
138 |         if options.outdated or options.uptodate:
139 |             super().handle_pip_version_check(options)
140 | 
141 |     def _build_package_finder(
142 |         self, options: Values, session: "PipSession"
143 |     ) -> "PackageFinder":
144 |         """
145 |         Create a package finder appropriate to this list command.
146 |         """
147 |         # Lazy import the heavy index modules as most list invocations won't need 'em.
148 |         from pip._internal.index.collector import LinkCollector
149 |         from pip._internal.index.package_finder import PackageFinder
150 | 
151 |         link_collector = LinkCollector.create(session, options=options)
152 | 
153 |         # Pass allow_yanked=False to ignore yanked versions.
154 |         selection_prefs = SelectionPreferences(
155 |             allow_yanked=False,
156 |             allow_all_prereleases=options.pre,
157 |         )
158 | 
159 |         return PackageFinder.create(
160 |             link_collector=link_collector,
161 |             selection_prefs=selection_prefs,
162 |         )
163 | 
164 |     def run(self, options: Values, args: List[str]) -> int:
165 |         if options.outdated and options.uptodate:
166 |             raise CommandError("Options --outdated and --uptodate cannot be combined.")
167 | 
168 |         if options.outdated and options.list_format == "freeze":
169 |             raise CommandError(
170 |                 "List format 'freeze' cannot be used with the --outdated option."
171 |             )
172 | 
173 |         cmdoptions.check_list_path_option(options)
174 | 
175 |         skip = set(stdlib_pkgs)
176 |         if options.excludes:
177 |             skip.update(canonicalize_name(n) for n in options.excludes)
178 | 
179 |         packages: "_ProcessedDists" = [
180 |             cast("_DistWithLatestInfo", d)
181 |             for d in get_environment(options.path).iter_installed_distributions(
182 |                 local_only=options.local,
183 |                 user_only=options.user,
184 |                 editables_only=options.editable,
185 |                 include_editables=options.include_editable,
186 |                 skip=skip,
187 |             )
188 |         ]
189 | 
190 |         # get_not_required must be called firstly in order to find and
191 |         # filter out all dependencies correctly. Otherwise a package
192 |         # can't be identified as requirement because some parent packages
193 |         # could be filtered out before.
194 |         if options.not_required:
195 |             packages = self.get_not_required(packages, options)
196 | 
197 |         if options.outdated:
198 |             packages = self.get_outdated(packages, options)
199 |         elif options.uptodate:
200 |             packages = self.get_uptodate(packages, options)
201 | 
202 |         self.output_package_listing(packages, options)
203 |         return SUCCESS
204 | 
205 |     def get_outdated(
206 |         self, packages: "_ProcessedDists", options: Values
207 |     ) -> "_ProcessedDists":
208 |         return [
209 |             dist
210 |             for dist in self.iter_packages_latest_infos(packages, options)
211 |             if dist.latest_version > dist.version
212 |         ]
213 | 
214 |     def get_uptodate(
215 |         self, packages: "_ProcessedDists", options: Values
216 |     ) -> "_ProcessedDists":
217 |         return [
218 |             dist
219 |             for dist in self.iter_packages_latest_infos(packages, options)
220 |             if dist.latest_version == dist.version
221 |         ]
222 | 
223 |     def get_not_required(
224 |         self, packages: "_ProcessedDists", options: Values
225 |     ) -> "_ProcessedDists":
226 |         dep_keys = {
227 |             canonicalize_name(dep.name)
228 |             for dist in packages
229 |             for dep in (dist.iter_dependencies() or ())
230 |         }
231 | 
232 |         # Create a set to remove duplicate packages, and cast it to a list
233 |         # to keep the return type consistent with get_outdated and
234 |         # get_uptodate
235 |         return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys})
236 | 
237 |     def iter_packages_latest_infos(
238 |         self, packages: "_ProcessedDists", options: Values
239 |     ) -> Generator["_DistWithLatestInfo", None, None]:
240 |         with self._build_session(options) as session:
241 |             finder = self._build_package_finder(options, session)
242 | 
243 |             def latest_info(
244 |                 dist: "_DistWithLatestInfo",
245 |             ) -> Optional["_DistWithLatestInfo"]:
246 |                 all_candidates = finder.find_all_candidates(dist.canonical_name)
247 |                 if not options.pre:
248 |                     # Remove prereleases
249 |                     all_candidates = [
250 |                         candidate
251 |                         for candidate in all_candidates
252 |                         if not candidate.version.is_prerelease
253 |                     ]
254 | 
255 |                 evaluator = finder.make_candidate_evaluator(
256 |                     project_name=dist.canonical_name,
257 |                 )
258 |                 best_candidate = evaluator.sort_best_candidate(all_candidates)
259 |                 if best_candidate is None:
260 |                     return None
261 | 
262 |                 remote_version = best_candidate.version
263 |                 if best_candidate.link.is_wheel:
264 |                     typ = "wheel"
265 |                 else:
266 |                     typ = "sdist"
267 |                 dist.latest_version = remote_version
268 |                 dist.latest_filetype = typ
269 |                 return dist
270 | 
271 |             for dist in map(latest_info, packages):
272 |                 if dist is not None:
273 |                     yield dist
274 | 
275 |     def output_package_listing(
276 |         self, packages: "_ProcessedDists", options: Values
277 |     ) -> None:
278 |         packages = sorted(
279 |             packages,
280 |             key=lambda dist: dist.canonical_name,
281 |         )
282 |         if options.list_format == "columns" and packages:
283 |             data, header = format_for_columns(packages, options)
284 |             self.output_package_listing_columns(data, header)
285 |         elif options.list_format == "freeze":
286 |             for dist in packages:
287 |                 if options.verbose >= 1:
288 |                     write_output(
289 |                         "%s==%s (%s)", dist.raw_name, dist.version, dist.location
290 |                     )
291 |                 else:
292 |                     write_output("%s==%s", dist.raw_name, dist.version)
293 |         elif options.list_format == "json":
294 |             write_output(format_for_json(packages, options))
295 | 
296 |     def output_package_listing_columns(
297 |         self, data: List[List[str]], header: List[str]
298 |     ) -> None:
299 |         # insert the header first: we need to know the size of column names
300 |         if len(data) > 0:
301 |             data.insert(0, header)
302 | 
303 |         pkg_strings, sizes = tabulate(data)
304 | 
305 |         # Create and add a separator.
306 |         if len(data) > 0:
307 |             pkg_strings.insert(1, " ".join("-" * x for x in sizes))
308 | 
309 |         for val in pkg_strings:
310 |             write_output(val)
311 | 
312 | 
313 | def format_for_columns(
314 |     pkgs: "_ProcessedDists", options: Values
315 | ) -> Tuple[List[List[str]], List[str]]:
316 |     """
317 |     Convert the package data into something usable
318 |     by output_package_listing_columns.
319 |     """
320 |     header = ["Package", "Version"]
321 | 
322 |     running_outdated = options.outdated
323 |     if running_outdated:
324 |         header.extend(["Latest", "Type"])
325 | 
326 |     has_editables = any(x.editable for x in pkgs)
327 |     if has_editables:
328 |         header.append("Editable project location")
329 | 
330 |     if options.verbose >= 1:
331 |         header.append("Location")
332 |     if options.verbose >= 1:
333 |         header.append("Installer")
334 | 
335 |     data = []
336 |     for proj in pkgs:
337 |         # if we're working on the 'outdated' list, separate out the
338 |         # latest_version and type
339 |         row = [proj.raw_name, proj.raw_version]
340 | 
341 |         if running_outdated:
342 |             row.append(str(proj.latest_version))
343 |             row.append(proj.latest_filetype)
344 | 
345 |         if has_editables:
346 |             row.append(proj.editable_project_location or "")
347 | 
348 |         if options.verbose >= 1:
349 |             row.append(proj.location or "")
350 |         if options.verbose >= 1:
351 |             row.append(proj.installer)
352 | 
353 |         data.append(row)
354 | 
355 |     return data, header
356 | 
357 | 
358 | def format_for_json(packages: "_ProcessedDists", options: Values) -> str:
359 |     data = []
360 |     for dist in packages:
361 |         info = {
362 |             "name": dist.raw_name,
363 |             "version": str(dist.version),
364 |         }
365 |         if options.verbose >= 1:
366 |             info["location"] = dist.location or ""
367 |             info["installer"] = dist.installer
368 |         if options.outdated:
369 |             info["latest_version"] = str(dist.latest_version)
370 |             info["latest_filetype"] = dist.latest_filetype
371 |         editable_project_location = dist.editable_project_location
372 |         if editable_project_location:
373 |             info["editable_project_location"] = editable_project_location
374 |         data.append(info)
375 |     return json.dumps(data)
376 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/valid.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: The DTD validation
  3 |  * Description: API for the DTD handling and the validity checking
  4 |  *
  5 |  * Copy: See Copyright for the status of this software.
  6 |  *
  7 |  * Author: Daniel Veillard
  8 |  */
  9 | 
 10 | 
 11 | #ifndef __XML_VALID_H__
 12 | #define __XML_VALID_H__
 13 | 
 14 | #include <libxml/xmlversion.h>
 15 | #include <libxml/xmlerror.h>
 16 | #define XML_TREE_INTERNALS
 17 | #include <libxml/tree.h>
 18 | #undef XML_TREE_INTERNALS
 19 | #include <libxml/list.h>
 20 | #include <libxml/xmlautomata.h>
 21 | #include <libxml/xmlregexp.h>
 22 | 
 23 | #ifdef __cplusplus
 24 | extern "C" {
 25 | #endif
 26 | 
 27 | /*
 28 |  * Validation state added for non-determinist content model.
 29 |  */
 30 | typedef struct _xmlValidState xmlValidState;
 31 | typedef xmlValidState *xmlValidStatePtr;
 32 | 
 33 | /**
 34 |  * xmlValidityErrorFunc:
 35 |  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
 36 |  *        but comes from ctxt->userData (which normally contains such
 37 |  *        a pointer); ctxt->userData can be changed by the user.
 38 |  * @msg:  the string to format *printf like vararg
 39 |  * @...:  remaining arguments to the format
 40 |  *
 41 |  * Callback called when a validity error is found. This is a message
 42 |  * oriented function similar to an *printf function.
 43 |  */
 44 | typedef void (*xmlValidityErrorFunc) (void *ctx,
 45 | 			     const char *msg,
 46 | 			     ...) LIBXML_ATTR_FORMAT(2,3);
 47 | 
 48 | /**
 49 |  * xmlValidityWarningFunc:
 50 |  * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
 51 |  *        but comes from ctxt->userData (which normally contains such
 52 |  *        a pointer); ctxt->userData can be changed by the user.
 53 |  * @msg:  the string to format *printf like vararg
 54 |  * @...:  remaining arguments to the format
 55 |  *
 56 |  * Callback called when a validity warning is found. This is a message
 57 |  * oriented function similar to an *printf function.
 58 |  */
 59 | typedef void (*xmlValidityWarningFunc) (void *ctx,
 60 | 			       const char *msg,
 61 | 			       ...) LIBXML_ATTR_FORMAT(2,3);
 62 | 
 63 | /*
 64 |  * xmlValidCtxt:
 65 |  * An xmlValidCtxt is used for error reporting when validating.
 66 |  */
 67 | typedef struct _xmlValidCtxt xmlValidCtxt;
 68 | typedef xmlValidCtxt *xmlValidCtxtPtr;
 69 | struct _xmlValidCtxt {
 70 |     void *userData;			/* user specific data block */
 71 |     xmlValidityErrorFunc error;		/* the callback in case of errors */
 72 |     xmlValidityWarningFunc warning;	/* the callback in case of warning */
 73 | 
 74 |     /* Node analysis stack used when validating within entities */
 75 |     xmlNodePtr         node;          /* Current parsed Node */
 76 |     int                nodeNr;        /* Depth of the parsing stack */
 77 |     int                nodeMax;       /* Max depth of the parsing stack */
 78 |     xmlNodePtr        *nodeTab;       /* array of nodes */
 79 | 
 80 |     unsigned int         flags;       /* internal flags */
 81 |     xmlDocPtr              doc;       /* the document */
 82 |     int                  valid;       /* temporary validity check result */
 83 | 
 84 |     /* state state used for non-determinist content validation */
 85 |     xmlValidState     *vstate;        /* current state */
 86 |     int                vstateNr;      /* Depth of the validation stack */
 87 |     int                vstateMax;     /* Max depth of the validation stack */
 88 |     xmlValidState     *vstateTab;     /* array of validation states */
 89 | 
 90 | #ifdef LIBXML_REGEXP_ENABLED
 91 |     xmlAutomataPtr            am;     /* the automata */
 92 |     xmlAutomataStatePtr    state;     /* used to build the automata */
 93 | #else
 94 |     void                     *am;
 95 |     void                  *state;
 96 | #endif
 97 | };
 98 | 
 99 | /*
100 |  * ALL notation declarations are stored in a table.
101 |  * There is one table per DTD.
102 |  */
103 | 
104 | typedef struct _xmlHashTable xmlNotationTable;
105 | typedef xmlNotationTable *xmlNotationTablePtr;
106 | 
107 | /*
108 |  * ALL element declarations are stored in a table.
109 |  * There is one table per DTD.
110 |  */
111 | 
112 | typedef struct _xmlHashTable xmlElementTable;
113 | typedef xmlElementTable *xmlElementTablePtr;
114 | 
115 | /*
116 |  * ALL attribute declarations are stored in a table.
117 |  * There is one table per DTD.
118 |  */
119 | 
120 | typedef struct _xmlHashTable xmlAttributeTable;
121 | typedef xmlAttributeTable *xmlAttributeTablePtr;
122 | 
123 | /*
124 |  * ALL IDs attributes are stored in a table.
125 |  * There is one table per document.
126 |  */
127 | 
128 | typedef struct _xmlHashTable xmlIDTable;
129 | typedef xmlIDTable *xmlIDTablePtr;
130 | 
131 | /*
132 |  * ALL Refs attributes are stored in a table.
133 |  * There is one table per document.
134 |  */
135 | 
136 | typedef struct _xmlHashTable xmlRefTable;
137 | typedef xmlRefTable *xmlRefTablePtr;
138 | 
139 | /* Notation */
140 | XMLPUBFUN xmlNotationPtr
141 | 		xmlAddNotationDecl	(xmlValidCtxtPtr ctxt,
142 | 					 xmlDtdPtr dtd,
143 | 					 const xmlChar *name,
144 | 					 const xmlChar *PublicID,
145 | 					 const xmlChar *SystemID);
146 | #ifdef LIBXML_TREE_ENABLED
147 | XMLPUBFUN xmlNotationTablePtr
148 | 		xmlCopyNotationTable	(xmlNotationTablePtr table);
149 | #endif /* LIBXML_TREE_ENABLED */
150 | XMLPUBFUN void
151 | 		xmlFreeNotationTable	(xmlNotationTablePtr table);
152 | #ifdef LIBXML_OUTPUT_ENABLED
153 | XMLPUBFUN void
154 | 		xmlDumpNotationDecl	(xmlBufferPtr buf,
155 | 					 xmlNotationPtr nota);
156 | XMLPUBFUN void
157 | 		xmlDumpNotationTable	(xmlBufferPtr buf,
158 | 					 xmlNotationTablePtr table);
159 | #endif /* LIBXML_OUTPUT_ENABLED */
160 | 
161 | /* Element Content */
162 | /* the non Doc version are being deprecated */
163 | XMLPUBFUN xmlElementContentPtr
164 | 		xmlNewElementContent	(const xmlChar *name,
165 | 					 xmlElementContentType type);
166 | XMLPUBFUN xmlElementContentPtr
167 | 		xmlCopyElementContent	(xmlElementContentPtr content);
168 | XMLPUBFUN void
169 | 		xmlFreeElementContent	(xmlElementContentPtr cur);
170 | /* the new versions with doc argument */
171 | XMLPUBFUN xmlElementContentPtr
172 | 		xmlNewDocElementContent	(xmlDocPtr doc,
173 | 					 const xmlChar *name,
174 | 					 xmlElementContentType type);
175 | XMLPUBFUN xmlElementContentPtr
176 | 		xmlCopyDocElementContent(xmlDocPtr doc,
177 | 					 xmlElementContentPtr content);
178 | XMLPUBFUN void
179 | 		xmlFreeDocElementContent(xmlDocPtr doc,
180 | 					 xmlElementContentPtr cur);
181 | XMLPUBFUN void
182 | 		xmlSnprintfElementContent(char *buf,
183 | 					 int size,
184 | 	                                 xmlElementContentPtr content,
185 | 					 int englob);
186 | #ifdef LIBXML_OUTPUT_ENABLED
187 | /* DEPRECATED */
188 | XMLPUBFUN void
189 | 		xmlSprintfElementContent(char *buf,
190 | 	                                 xmlElementContentPtr content,
191 | 					 int englob);
192 | #endif /* LIBXML_OUTPUT_ENABLED */
193 | /* DEPRECATED */
194 | 
195 | /* Element */
196 | XMLPUBFUN xmlElementPtr
197 | 		xmlAddElementDecl	(xmlValidCtxtPtr ctxt,
198 | 					 xmlDtdPtr dtd,
199 | 					 const xmlChar *name,
200 | 					 xmlElementTypeVal type,
201 | 					 xmlElementContentPtr content);
202 | #ifdef LIBXML_TREE_ENABLED
203 | XMLPUBFUN xmlElementTablePtr
204 | 		xmlCopyElementTable	(xmlElementTablePtr table);
205 | #endif /* LIBXML_TREE_ENABLED */
206 | XMLPUBFUN void
207 | 		xmlFreeElementTable	(xmlElementTablePtr table);
208 | #ifdef LIBXML_OUTPUT_ENABLED
209 | XMLPUBFUN void
210 | 		xmlDumpElementTable	(xmlBufferPtr buf,
211 | 					 xmlElementTablePtr table);
212 | XMLPUBFUN void
213 | 		xmlDumpElementDecl	(xmlBufferPtr buf,
214 | 					 xmlElementPtr elem);
215 | #endif /* LIBXML_OUTPUT_ENABLED */
216 | 
217 | /* Enumeration */
218 | XMLPUBFUN xmlEnumerationPtr
219 | 		xmlCreateEnumeration	(const xmlChar *name);
220 | XMLPUBFUN void
221 | 		xmlFreeEnumeration	(xmlEnumerationPtr cur);
222 | #ifdef LIBXML_TREE_ENABLED
223 | XMLPUBFUN xmlEnumerationPtr
224 | 		xmlCopyEnumeration	(xmlEnumerationPtr cur);
225 | #endif /* LIBXML_TREE_ENABLED */
226 | 
227 | /* Attribute */
228 | XMLPUBFUN xmlAttributePtr
229 | 		xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt,
230 | 					 xmlDtdPtr dtd,
231 | 					 const xmlChar *elem,
232 | 					 const xmlChar *name,
233 | 					 const xmlChar *ns,
234 | 					 xmlAttributeType type,
235 | 					 xmlAttributeDefault def,
236 | 					 const xmlChar *defaultValue,
237 | 					 xmlEnumerationPtr tree);
238 | #ifdef LIBXML_TREE_ENABLED
239 | XMLPUBFUN xmlAttributeTablePtr
240 | 		xmlCopyAttributeTable  (xmlAttributeTablePtr table);
241 | #endif /* LIBXML_TREE_ENABLED */
242 | XMLPUBFUN void
243 | 		xmlFreeAttributeTable  (xmlAttributeTablePtr table);
244 | #ifdef LIBXML_OUTPUT_ENABLED
245 | XMLPUBFUN void
246 | 		xmlDumpAttributeTable  (xmlBufferPtr buf,
247 | 					xmlAttributeTablePtr table);
248 | XMLPUBFUN void
249 | 		xmlDumpAttributeDecl   (xmlBufferPtr buf,
250 | 					xmlAttributePtr attr);
251 | #endif /* LIBXML_OUTPUT_ENABLED */
252 | 
253 | /* IDs */
254 | XMLPUBFUN xmlIDPtr
255 | 		xmlAddID	       (xmlValidCtxtPtr ctxt,
256 | 					xmlDocPtr doc,
257 | 					const xmlChar *value,
258 | 					xmlAttrPtr attr);
259 | XMLPUBFUN void
260 | 		xmlFreeIDTable	       (xmlIDTablePtr table);
261 | XMLPUBFUN xmlAttrPtr
262 | 		xmlGetID	       (xmlDocPtr doc,
263 | 					const xmlChar *ID);
264 | XMLPUBFUN int
265 | 		xmlIsID		       (xmlDocPtr doc,
266 | 					xmlNodePtr elem,
267 | 					xmlAttrPtr attr);
268 | XMLPUBFUN int
269 | 		xmlRemoveID	       (xmlDocPtr doc,
270 | 					xmlAttrPtr attr);
271 | 
272 | /* IDREFs */
273 | XML_DEPRECATED
274 | XMLPUBFUN xmlRefPtr
275 | 		xmlAddRef	       (xmlValidCtxtPtr ctxt,
276 | 					xmlDocPtr doc,
277 | 					const xmlChar *value,
278 | 					xmlAttrPtr attr);
279 | XML_DEPRECATED
280 | XMLPUBFUN void
281 | 		xmlFreeRefTable	       (xmlRefTablePtr table);
282 | XML_DEPRECATED
283 | XMLPUBFUN int
284 | 		xmlIsRef	       (xmlDocPtr doc,
285 | 					xmlNodePtr elem,
286 | 					xmlAttrPtr attr);
287 | XML_DEPRECATED
288 | XMLPUBFUN int
289 | 		xmlRemoveRef	       (xmlDocPtr doc,
290 | 					xmlAttrPtr attr);
291 | XML_DEPRECATED
292 | XMLPUBFUN xmlListPtr
293 | 		xmlGetRefs	       (xmlDocPtr doc,
294 | 					const xmlChar *ID);
295 | 
296 | /**
297 |  * The public function calls related to validity checking.
298 |  */
299 | #ifdef LIBXML_VALID_ENABLED
300 | /* Allocate/Release Validation Contexts */
301 | XMLPUBFUN xmlValidCtxtPtr
302 | 		xmlNewValidCtxt(void);
303 | XMLPUBFUN void
304 | 		xmlFreeValidCtxt(xmlValidCtxtPtr);
305 | 
306 | XMLPUBFUN int
307 | 		xmlValidateRoot		(xmlValidCtxtPtr ctxt,
308 | 					 xmlDocPtr doc);
309 | XMLPUBFUN int
310 | 		xmlValidateElementDecl	(xmlValidCtxtPtr ctxt,
311 | 					 xmlDocPtr doc,
312 | 		                         xmlElementPtr elem);
313 | XMLPUBFUN xmlChar *
314 | 		xmlValidNormalizeAttributeValue(xmlDocPtr doc,
315 | 					 xmlNodePtr elem,
316 | 					 const xmlChar *name,
317 | 					 const xmlChar *value);
318 | XMLPUBFUN xmlChar *
319 | 		xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
320 | 					 xmlDocPtr doc,
321 | 					 xmlNodePtr elem,
322 | 					 const xmlChar *name,
323 | 					 const xmlChar *value);
324 | XMLPUBFUN int
325 | 		xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
326 | 					 xmlDocPtr doc,
327 | 		                         xmlAttributePtr attr);
328 | XMLPUBFUN int
329 | 		xmlValidateAttributeValue(xmlAttributeType type,
330 | 					 const xmlChar *value);
331 | XMLPUBFUN int
332 | 		xmlValidateNotationDecl	(xmlValidCtxtPtr ctxt,
333 | 					 xmlDocPtr doc,
334 | 		                         xmlNotationPtr nota);
335 | XMLPUBFUN int
336 | 		xmlValidateDtd		(xmlValidCtxtPtr ctxt,
337 | 					 xmlDocPtr doc,
338 | 					 xmlDtdPtr dtd);
339 | XMLPUBFUN int
340 | 		xmlValidateDtdFinal	(xmlValidCtxtPtr ctxt,
341 | 					 xmlDocPtr doc);
342 | XMLPUBFUN int
343 | 		xmlValidateDocument	(xmlValidCtxtPtr ctxt,
344 | 					 xmlDocPtr doc);
345 | XMLPUBFUN int
346 | 		xmlValidateElement	(xmlValidCtxtPtr ctxt,
347 | 					 xmlDocPtr doc,
348 | 					 xmlNodePtr elem);
349 | XMLPUBFUN int
350 | 		xmlValidateOneElement	(xmlValidCtxtPtr ctxt,
351 | 					 xmlDocPtr doc,
352 | 		                         xmlNodePtr elem);
353 | XMLPUBFUN int
354 | 		xmlValidateOneAttribute	(xmlValidCtxtPtr ctxt,
355 | 					 xmlDocPtr doc,
356 | 					 xmlNodePtr	elem,
357 | 					 xmlAttrPtr attr,
358 | 					 const xmlChar *value);
359 | XMLPUBFUN int
360 | 		xmlValidateOneNamespace	(xmlValidCtxtPtr ctxt,
361 | 					 xmlDocPtr doc,
362 | 					 xmlNodePtr elem,
363 | 					 const xmlChar *prefix,
364 | 					 xmlNsPtr ns,
365 | 					 const xmlChar *value);
366 | XMLPUBFUN int
367 | 		xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
368 | 					 xmlDocPtr doc);
369 | #endif /* LIBXML_VALID_ENABLED */
370 | 
371 | #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
372 | XMLPUBFUN int
373 | 		xmlValidateNotationUse	(xmlValidCtxtPtr ctxt,
374 | 					 xmlDocPtr doc,
375 | 					 const xmlChar *notationName);
376 | #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
377 | 
378 | XMLPUBFUN int
379 | 		xmlIsMixedElement	(xmlDocPtr doc,
380 | 					 const xmlChar *name);
381 | XMLPUBFUN xmlAttributePtr
382 | 		xmlGetDtdAttrDesc	(xmlDtdPtr dtd,
383 | 					 const xmlChar *elem,
384 | 					 const xmlChar *name);
385 | XMLPUBFUN xmlAttributePtr
386 | 		xmlGetDtdQAttrDesc	(xmlDtdPtr dtd,
387 | 					 const xmlChar *elem,
388 | 					 const xmlChar *name,
389 | 					 const xmlChar *prefix);
390 | XMLPUBFUN xmlNotationPtr
391 | 		xmlGetDtdNotationDesc	(xmlDtdPtr dtd,
392 | 					 const xmlChar *name);
393 | XMLPUBFUN xmlElementPtr
394 | 		xmlGetDtdQElementDesc	(xmlDtdPtr dtd,
395 | 					 const xmlChar *name,
396 | 					 const xmlChar *prefix);
397 | XMLPUBFUN xmlElementPtr
398 | 		xmlGetDtdElementDesc	(xmlDtdPtr dtd,
399 | 					 const xmlChar *name);
400 | 
401 | #ifdef LIBXML_VALID_ENABLED
402 | 
403 | XMLPUBFUN int
404 | 		xmlValidGetPotentialChildren(xmlElementContent *ctree,
405 | 					 const xmlChar **names,
406 | 					 int *len,
407 | 					 int max);
408 | 
409 | XMLPUBFUN int
410 | 		xmlValidGetValidElements(xmlNode *prev,
411 | 					 xmlNode *next,
412 | 					 const xmlChar **names,
413 | 					 int max);
414 | XMLPUBFUN int
415 | 		xmlValidateNameValue	(const xmlChar *value);
416 | XMLPUBFUN int
417 | 		xmlValidateNamesValue	(const xmlChar *value);
418 | XMLPUBFUN int
419 | 		xmlValidateNmtokenValue	(const xmlChar *value);
420 | XMLPUBFUN int
421 | 		xmlValidateNmtokensValue(const xmlChar *value);
422 | 
423 | #ifdef LIBXML_REGEXP_ENABLED
424 | /*
425 |  * Validation based on the regexp support
426 |  */
427 | XMLPUBFUN int
428 | 		xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
429 | 					 xmlElementPtr elem);
430 | 
431 | XMLPUBFUN int
432 | 		xmlValidatePushElement	(xmlValidCtxtPtr ctxt,
433 | 					 xmlDocPtr doc,
434 | 					 xmlNodePtr elem,
435 | 					 const xmlChar *qname);
436 | XMLPUBFUN int
437 | 		xmlValidatePushCData	(xmlValidCtxtPtr ctxt,
438 | 					 const xmlChar *data,
439 | 					 int len);
440 | XMLPUBFUN int
441 | 		xmlValidatePopElement	(xmlValidCtxtPtr ctxt,
442 | 					 xmlDocPtr doc,
443 | 					 xmlNodePtr elem,
444 | 					 const xmlChar *qname);
445 | #endif /* LIBXML_REGEXP_ENABLED */
446 | #endif /* LIBXML_VALID_ENABLED */
447 | #ifdef __cplusplus
448 | }
449 | #endif
450 | #endif /* __XML_VALID_H__ */
451 | 
```
Page 47/168FirstPrevNextLast