[
  {
    "path": ".flake8",
    "content": "[flake8]\nignore = T001,W503\nmax-line-length = 100\nper-file-ignores = generate_ghidra_pyi.py:E402\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "name: Publish Tagged Commit to PyPI\n\non:\n  push:\n    tags:\n      - \"v*.*.*\"\n  workflow_dispatch:\n    inputs:\n      workflow-ghidra-ver:\n        description: \"Specify Ghidra Version to Build\"\n        required: true\n        type: string\n        default: \"latest\"\n  schedule:\n    - cron: \"0 13 * * 3\"\n\njobs:\n  set-versions:\n    runs-on: ubuntu-20.04\n    outputs:\n      ghidra-ver: ${{ env.GHIDRA_VER }}\n      pyi-ver: ${{ env.PYI_VER }}\n      pyi-rel-ver: ${{ env.PYI_REL_VER }}\n    steps:\n      - if: github.event_name == 'schedule' || github.event.inputs.workflow-ghidra-ver == 'latest'\n        name: Get Latest Ghidra Version\n        id: get_latest_ghidra_ver\n        uses: pozetroninc/github-action-get-latest-release@v0.6.0\n        with:\n          repository: NationalSecurityAgency/ghidra\n          excludes: prerelease, draft\n      - name: Set Ghidra Version from Latest\n        if: github.event_name == 'schedule' || github.event.inputs.workflow-ghidra-ver == 'latest'\n        id: format_ghidra_ver\n        run: |\n          echo \"GHIDRA_VER=$(echo ${{steps.get_latest_ghidra_ver.outputs.release}} | cut -d_ -f2)\" >> $GITHUB_ENV\n      - name: Set Ghidra Version from Input\n        if: github.event_name == 'workflow_dispatch' && github.event.inputs.workflow-ghidra-ver != 'latest'\n        run: |\n          echo \"GHIDRA_VER=$(echo ${{github.event.inputs.workflow-ghidra-ver}})\" >> $GITHUB_ENV\n      - name: Checkout repo\n        uses: actions/checkout@v3\n      - name: Get Ghidra Stubs Version\n        id: get_pyi_ver\n        run: |\n          echo \"PYI_VER=$(python version.py)\" >> $GITHUB_ENV\n      - name: Get Ghidra Stubs Full Release Version\n        id: get_pyi_rel_ver\n        run: |\n          echo \"PYI_REL_VER=$GHIDRA_VER.$PYI_VER\" >> $GITHUB_ENV\n  check-release:\n    needs:\n      - set-versions\n    runs-on: ubuntu-20.04\n    outputs:\n      already-exists: ${{ contains( steps.self.outputs.release, needs.set-versions.outputs.pyi-rel-ver ) }}\n    steps:\n      - id: self\n        uses: pozetroninc/github-action-get-latest-release@v0.6.0\n        with:\n          repository: ${{ github.repository }}\n      - name: Print Versions and Already Exists\n        run: |\n          echo \"Ghidra ver: ${{ needs.set-versions.outputs.ghidra-ver }} PYI ver: ${{ needs.set-versions.outputs.pyi-ver }} PYI Release: ${{needs.set-versions.outputs.pyi-rel-ver}} Current Release: ${{steps.self.outputs.release }}\"\n          echo \"already exists ${{ contains( steps.self.outputs.release, needs.set-versions.outputs.pyi-rel-ver ) }}\"\n  build-n-publish:\n    needs:\n      - set-versions\n      - check-release\n    if: needs.check-release.outputs.already-exists == 'false' || (github.event_name == 'workflow_dispatch' && github.event.inputs.workflow-ghidra-ver != 'latest')\n    name: Build and publish Python Package\n    runs-on: ubuntu-20.04\n    permissions:\n      # IMPORTANT: this permission is mandatory for trusted publishing\n      id-token: write\n      # Required for publishing a release on GitHub\n      contents: write\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up JDK 1.11\n        uses: actions/setup-java@v3\n        with:\n          distribution: \"temurin\"\n          java-version: \"21\"\n\n      - uses: er28-0652/setup-ghidra@master\n        with:\n          version: \"${{ needs.set-versions.outputs.ghidra-ver }}\"\n\n      - name: Prepare Jython Environment\n        run: |\n          \"$GHIDRA_INSTALL_DIR/support/analyzeHeadless\" /tmp tmp -scriptPath $(pwd) -preScript vendor_packages.py\n\n      - name: Build Package\n        run: |\n          \"$GHIDRA_INSTALL_DIR/support/analyzeHeadless\" /tmp tmp -scriptPath $(pwd) -preScript generate_ghidra_pyi.py ./ ${{ needs.set-versions.outputs.pyi-ver }}\n          test -f setup.py # check manually, because analyzeHeadless doesn't fail on script failure\n          test -d ghidra-stubs\n\n      - name: Set up Python 3.11\n        uses: actions/setup-python@v4\n        with:\n          python-version: 3.11\n\n      - name: Install pypa/build\n        run: >-\n          python -m\n          pip install\n          wheel\n          --user\n\n      - name: Build a binary wheel and a source tarball\n        run: |\n          python setup.py bdist_wheel --universal\n          python setup.py sdist\n\n      - name: Upload dist as artifacts\n        uses: actions/upload-artifact@v3\n        with:\n          name: dist\n          path: dist\n\n      - name: Publish distribution 📦 to PyPI\n        uses: pypa/gh-action-pypi-publish@release/v1\n\n      - name: Release on GitHub\n        uses: softprops/action-gh-release@v1\n        with:\n          files: ./dist/*\n          tag_name: \"v${{ needs.set-versions.outputs.pyi-rel-ver }}\"\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Test Generation Code\n\non:\n  pull_request:\n  push:\n    branches:\n      - master\n  workflow_dispatch:\n    inputs:\n      workflow-ghidra-ver:\n        description: \"Specify Ghidra Version to Build\"\n        required: true\n        type: string\n        default: \"latest\"\n\njobs:\n  set-versions:\n    runs-on: ubuntu-20.04\n    outputs:\n      ghidra-ver: ${{ env.GHIDRA_VER }}\n      pyi-ver: ${{ env.PYI_VER }}\n      pyi-rel-ver: ${{ env.PYI_REL_VER }}\n    steps:\n      - name: Get Latest Ghidra Version\n        id: get_latest_ghidra_ver\n        uses: pozetroninc/github-action-get-latest-release@v0.7.0\n        with:\n          repository: NationalSecurityAgency/ghidra\n          excludes: prerelease, draft\n      - name: Set Ghidra Version from Latest\n        id: format_ghidra_ver\n        run: |\n          echo \"GHIDRA_VER=$(echo ${{steps.get_latest_ghidra_ver.outputs.release}} | cut -d_ -f2)\" >> $GITHUB_ENV\n      - name: Set Ghidra Version from Input\n        if: github.event_name == 'workflow_dispatch' && github.event.inputs.workflow-ghidra-ver != 'latest'\n        run: |\n          echo \"GHIDRA_VER=$(echo ${{github.event.inputs.workflow-ghidra-ver}})\" >> $GITHUB_ENV\n      - name: Checkout repo\n        uses: actions/checkout@v3\n      - name: Get Ghidra Stubs Version\n        id: get_pyi_ver\n        run: |\n          echo \"PYI_VER=$(python version.py)\" >> $GITHUB_ENV\n      - name: Get Ghidra Stubs Full Release Version\n        id: get_pyi_rel_ver\n        run: |\n          echo \"PYI_REL_VER=$GHIDRA_VER.$PYI_VER\" >> $GITHUB_ENV\n\n  build:\n    needs:\n      - set-versions\n    name: Build and publish Python Package\n    runs-on: ubuntu-20.04\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up JDK 1.11\n        uses: actions/setup-java@v3\n        with:\n          distribution: \"temurin\"\n          java-version: \"21\"\n\n      - uses: er28-0652/setup-ghidra@master\n        with:\n          version: \"${{ needs.set-versions.outputs.ghidra-ver }}\"\n\n      - name: Prepare Jython Environment\n        run: |\n          \"$GHIDRA_INSTALL_DIR/support/analyzeHeadless\" /tmp tmp -scriptPath $(pwd) -preScript vendor_packages.py\n\n      - name: Build Package\n        run: |\n          \"$GHIDRA_INSTALL_DIR/support/analyzeHeadless\" /tmp tmp -scriptPath $(pwd) -preScript generate_ghidra_pyi.py ./ ${{ needs.set-versions.outputs.pyi-ver }}\n          test -f setup.py # check manually, because analyzeHeadless doesn't fail on script failure\n          test -d ghidra-stubs\n\n      - name: Set up Python 3.11\n        uses: actions/setup-python@v4\n        with:\n          python-version: 3.11\n\n      - name: Install pypa/build\n        run: >-\n          python -m\n          pip install\n          wheel\n          --user\n\n      - name: Build a binary wheel and a source tarball\n        run: |\n          python setup.py bdist_wheel --universal\n          python setup.py sdist\n\n      - name: Upload dist as artifacts\n        uses: actions/upload-artifact@v3\n        with:\n          name: dist\n          path: dist\n"
  },
  {
    "path": ".gitignore",
    "content": "*$py.class\n*.pyi\n.idea\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "# Ghidra `.pyi` Generator\n\n> [!IMPORTANT]\n> Great news!\n> \n> Ghidra is now (as of version 11.3) publishing official stubs under the [ghidra-stubs](https://pypi.org/project/ghidra-stubs/) package, replacing this project.\n>\n> This repository will be archived and no longer maintained.\n\nThe Ghidra `.pyi` Generator generates `.pyi` [type stubs][pep-0484]\nfor the entire Ghidra API.\nThose stub files can later be used in PyCharm to enhance the development experience.\n\nYou can either use the stubs released [here][latest-release], or follow the instructions below to generate them yourself.\n\n\n## Using The Stubs\n\n### Installation \n\nThe release contains  [PEP 561 stub package][pep-561-stub], which can simply be installed with `pip install ghidra-stubs*.whl`\ninto the environment in which the real `ghidra` module is available. Any conformant tool will then use the stub package\nfor type analysis purposes.  \n\nIf you want to manually add the stub files to PyCharm, follow the instructions in [Install, uninstall, and upgrade interpreter paths][interpreter-paths].\n\n### Usage\n\nOnce installed, all you need to do is import the Ghidra modules as usual, and PyCharm will do the rest.\n\n```python\nimport ghidra\n```\n\nTo get support for the Ghidra builtins, you need to import them as well. The type hints for those exist in\nthe generated `ghidra_builtins.pyi` stub. Since it is not a real Python module, importing it at runtime will fail.\nBut the `.pyi` gives PyCharm all the information it needs to help you.\n\n```python\ntry:\n    from ghidra.ghidra_builtins import *\nexcept:\n    pass\n```\n\nIf you are using [ghidra_bridge](https://github.com/justfoxing/ghidra_bridge) from a Python 3 environment where no real `ghidra` module\nexists you can use a snippet like the following:\n\n```python\nimport typing\nif typing.TYPE_CHECKING:\n    import ghidra\n    from ghidra.ghidra_builtins import *\nelse:\n    b = ghidra_bridge.GhidraBridge(namespace=globals())\n\n# actual code follows here\n```\n\n`typing.TYPE_CHECKING` is a special value that is always `False` at runtime but `True` during any kind of type checking or completion.\n\nOnce done, just code & enjoy.\n\n![Pycharm Demo][pycharm-demo]\n\n\n## Dependencies\n\n### Ghidra Docs\n\nTo properly extract all types from Ghidra, make sure to extract the API documentation.\n\n1. Open the Ghidra CodeBrowser\n2. Go to `Help -> Ghidra API Help`\n3. Wait for Ghidra to extract the docs\n\n### Python Packages\n\nThe script depends on both the `attr` and `typing` packages.\nThey are now vendored under the `vendor` directory as Python2.7 support is gradually\nbeing dropped from the ecosystem, making it hard to install and fetch packages.\n\n```bash\n \n# Create Jython's site-pacakges directory.\njython_site_packages=~/.local/lib/jython2.7/site-packages\nmkdir -p $jython_site_packages\n \n# Create a PTH file to point Jython to our vendored site-packages\n\n# Outside a virtualenv, use\necho \"$(realpath ./vendor)\" > $jython_site_packages/python.pth\n\n```\n\n## Creating the `.pyi` files\n\n\n### GUI\n1. Add this directory to the `Script Directories` in the Ghidra Script Manager\n2. Refresh the script list\n3. Run `generate_ghidra_pyi.py` (will be located under `IDE Helpers`)\n4. When a directory-selection dialog appears, choose the directory you'd like to save the `.pyi` files in.\n\n### CLI\n\n```bash\n$GHIDRA_ROOT/support/analyzeHeadless /tmp tmp -scriptPath $(pwd) -preScript generate_ghidra_pyi.py ./\n```\n\n\n## Python Package\n\n`generate_ghidra_pyi.py` generates a `setup.py` inside the directory that was selected.\n\nThis allows using `pip install` to install a  [PEP 561 stub package][pep-561-stub] that is recognized by PyCharm and other tools as containing type information for the ghidra module.\n\n\n\n[interpreter-paths]: https://www.jetbrains.com/help/pycharm/installing-uninstalling-and-reloading-interpreter-paths.html\n[latest-release]: https://github.com/VDOO-Connected-Trust/ghidra-pyi-generator/releases/latest\n[pep-0484]: https://www.python.org/dev/peps/pep-0484/\n[pycharm-demo]: ./media/pycharm_demo.gif\n[pep-561-stub]: https://www.python.org/dev/peps/pep-0561/#stub-only-packages\n"
  },
  {
    "path": "basic_type.py",
    "content": "import re\n\nimport attr\n\n\n@attr.s(eq=True)\nclass BasicType(object):\n    name = attr.ib()  # type: str\n    module = attr.ib()  # type: str\n    is_array = attr.ib(default=False)  # type: bool\n    is_iterator = attr.ib(default=False)  # type: bool\n\n    REPLACEMENTS = {\n        'boolean': 'bool',\n        'java.lang.String': 'unicode',\n        'java.lang.Object': 'object',\n        'java.math.BigInteger': 'long',\n        'long': 'long',\n        'B': 'int',  # byte\n        'Z': 'bool',\n        'C': 'int',  # char\n        'S': 'int',  # short\n        'I': 'int',\n        'J': 'long',\n        'F': 'float',\n        'D': 'float',  # double\n        'void': 'None',\n        'short': 'int',\n        'byte': 'int',\n        'double': 'float',\n        # Below this line are replacements from parsing Java code\n        'char': 'int',  # char\n        'java.lang.Boolean': 'bool',\n        'java.lang.Integer': 'int',\n        'java.lang.Long': 'long',\n        'java.lang.Byte': 'int',\n        'java.lang.Double': 'float',\n        'java.lang.Short': 'int',\n        'java.lang.Float': 'float',\n    }\n\n    @property\n    def qualified_name(self):\n        if self.is_builtin:\n            return self.name\n\n        return '{self.module}.{self.name}'.format(self=self)\n\n    @property\n    def proper_name(self):\n        name = self.REPLACEMENTS.get(self.qualified_name, self.qualified_name)\n        if self.is_array:\n            return 'List[{}]'.format(name)\n        elif self.is_iterator:\n            return 'Iterator[{}]'.format(name)\n        return name\n\n    @property\n    def requires(self):\n        requires = set()\n\n        if self.is_array:\n            requires.add(('typing', 'List'))\n        if self.is_iterator:\n            requires.add(('typing', 'Iterator'))\n        if '.' in self.proper_name and not self.is_builtin:\n            requires.add(self.module)\n\n        return requires\n\n    @property\n    def is_builtin(self):\n        return self.module == str.__module__\n\n    def is_overload_match(self, other):\n        if not isinstance(other, BasicType):\n            return False\n\n        if self == other:\n            return True\n\n        if self.proper_name == other.proper_name:\n            return True\n\n        if self.is_iterator and other.qualified_name == 'java.util.Iterator':\n            return True\n\n        return False\n\n    @staticmethod\n    def from_type(t):\n        # type: (type) -> BasicType\n        is_array = t.__module__.startswith('[') or t.__name__.startswith('[')\n        name = t.__name__.lstrip('[').rstrip(';').replace('$', '.')\n        module = t.__module__.lstrip('[L')\n        if module == 'java.util' and name == 'List':\n            is_array = True\n            name = 'object'\n            module = str.__module__\n        return BasicType(name=name, module=module, is_array=is_array)\n\n    @staticmethod\n    def from_java(definition):\n        # type: (str) -> BasicType\n        match = re.match(r'((?P<template>[\\w.]+)<)?(?P<type>[\\w.]+)(?P<array>\\[\\])?>?', definition)\n        if match is None:\n            raise ValueError('Invalid type definition: {}'.format(definition))\n\n        type_name = match.group('type')\n\n        is_array = False\n        is_iterator = False\n        if match.group('array'):\n            is_array = True\n\n        template = match.group('template')\n        if template:\n            if template == 'java.util.List':\n                is_array = True\n            elif template == 'java.util.Iterator':\n                is_iterator = True\n            elif template == 'java.util.ArrayList':\n                is_array = True\n            else:\n                type_name = template\n\n        module, _sep, name = type_name.rpartition('.')\n        if not module:\n            module = str.__module__\n            name = type_name\n\n        if name == 'T':\n            name = 'object'\n\n        basic_type = BasicType(name=str(name), module=str(module), is_array=is_array, is_iterator=is_iterator)\n        if basic_type.proper_name == '.void':\n            print(basic_type)\n        return basic_type\n"
  },
  {
    "path": "class_loader.py",
    "content": "\"\"\"Load all classes from classes.list\n\nTo generate the `classes.list`,\nopen `api/overview-tree.html` from the Ghidra docs in a web-browser\nand copy it's contents to a text file.\n\"\"\"\n\nimport helper\nimport importlib\nimport re\nimport os\nimport java.lang\n\n\ndef get_class_name(line):\n    match = re.search(r'[\\w.]+', line)\n    if match:\n        return match.group(0)\n\n\ndef load_class(name):\n    module_name, _sep, class_name = name.rpartition('.')\n    module = importlib.import_module(module_name)\n    getattr(module, class_name)\n\n\ndef parse_class_list(list_path=None):\n    if list_path is None:\n        list_path = os.path.join(os.path.dirname(__file__), 'classes.list')\n\n    with open(list_path) as f:\n        classes = f.readlines()\n\n    for class_entry in classes:\n        yield get_class_name(class_entry)\n\n\ndef load_all_classes(prefix='ghidra', list_path=None):\n    parsed_classes = set(parse_class_list(list_path=list_path))\n    jsondoc_classes = set(helper.get_jsondoc_classes())\n    class_names = parsed_classes | jsondoc_classes\n\n    for class_name in class_names:\n        if class_name.startswith(prefix):\n            try:\n                load_class(class_name)\n            except (java.lang.Throwable, Exception):\n                print('Failed loading {}'.format(class_name))\n"
  },
  {
    "path": "classes.list",
    "content": "Annotation\ncom.google.common.base.Function\ndb.BinaryCodedField\ndb.BinaryField\ndb.BooleanField\ndb.BTreeNode\ndb.Buffer\ndb.buffers.BlockStream\ndb.buffers.BlockStreamHandle\ndb.buffers.BufferFile\ndb.buffers.BufferFileAdapter\ndb.buffers.BufferFileBlock\ndb.buffers.BufferFileHandle\ndb.buffers.BufferFileManager\ndb.buffers.BufferMgr\ndb.buffers.ChangeMap\ndb.buffers.ChangeMapFile\ndb.buffers.DataBuffer\ndb.buffers.InputBlockStream\ndb.buffers.LocalBufferFile\ndb.buffers.LocalManagedBufferFile\ndb.buffers.ManagedBufferFile\ndb.buffers.ManagedBufferFileAdapter\ndb.buffers.ManagedBufferFileHandle\ndb.buffers.OutputBlockStream\ndb.buffers.RemoteBufferFileHandle\ndb.buffers.RemoteBufferFileHandle\ndb.buffers.RemoteManagedBufferFileHandle\ndb.buffers.RemoteManagedBufferFileHandle\ndb.buffers.VersionFileHandler\ndb.ByteField\ndb.ChainedBuffer\ndb.ConvertedRecordIterator\ndb.Database\ndb.Database.DBBufferFileManager\ndb.DatabaseUtils\ndb.DBBuffer\ndb.DBChangeSet\ndb.DBConstants\ndb.DBFieldIterator\ndb.DBFileListener\ndb.DBHandle\ndb.DBInitializer\ndb.DBListener\ndb.DBLongIterator\ndb.DBRecord\ndb.Field\ndb.Field.UnsupportedFieldException\ndb.FieldIndexTable\ndb.FieldKeyInteriorNode\ndb.FieldKeyInteriorNode\ndb.FieldKeyNode\ndb.FixedField10\ndb.IllegalFieldAccessException\ndb.InteriorNode\ndb.IntField\ndb.KeyToRecordIterator\ndb.LongField\ndb.NoTransactionException\ndb.ObjectStorageAdapterDB\ndb.OpenMode\ndb.RecordIterator\ndb.RecordNode\ndb.RecordTranslator\ndb.Schema\ndb.ShortField\ndb.SparseRecord\ndb.StringField\ndb.Table\ndb.TableStatistics\ndb.TerminatedTransactionException\ndb.TestSpeed\ndb.TranslatedRecordIterator\ndb.util.ErrorHandler\ndecompiler.DecompilerInitializer\ndocking.AbstractDockingTool\ndocking.AbstractErrDialog\ndocking.action.ActionContextProvider\ndocking.action.builder.AbstractActionBuilder\ndocking.action.builder.AbstractActionBuilder.When\ndocking.action.builder.ActionBuilder\ndocking.action.builder.MultiActionBuilder\ndocking.action.builder.MultiStateActionBuilder\ndocking.action.builder.ToggleActionBuilder\ndocking.action.ComponentBasedDockingAction\ndocking.action.ContextSpecificAction\ndocking.action.DockingAction\ndocking.action.DockingActionIf\ndocking.action.DockingActionProviderIf\ndocking.action.HelpAction\ndocking.action.KeyBindingData\ndocking.action.KeyBindingsManager\ndocking.action.KeyBindingType\ndocking.action.MenuBarData\ndocking.action.MenuData\ndocking.action.MultiActionDockingActionIf\ndocking.action.MultipleKeyAction\ndocking.action.PopupMenuData\ndocking.action.ShowContextMenuAction\ndocking.action.ShowFocusCycleAction\ndocking.action.ShowFocusInfoAction\ndocking.action.ToggleDockingAction\ndocking.action.ToggleDockingActionIf\ndocking.action.ToolBarData\ndocking.ActionContext\ndocking.actions.ActionAdapter\ndocking.actions.AutoGeneratedDockingAction\ndocking.actions.DockingToolActions\ndocking.actions.KeyBindingAction\ndocking.actions.KeyBindingUtils\ndocking.actions.KeyEntryDialog\ndocking.actions.PopupActionProvider\ndocking.actions.SharedActionRegistry\ndocking.actions.SharedDockingActionPlaceholder\ndocking.actions.SharedStubKeyBindingAction\ndocking.actions.ToolActions\ndocking.ActionToGuiHelper\ndocking.ActionToGuiMapper\ndocking.ComponentLoadedListener\ndocking.ComponentPlaceholder\ndocking.ComponentProvider\ndocking.ComponentProviderActivationListener\ndocking.DefaultFocusOwnerProvider\ndocking.DefaultHelpService\ndocking.DialogComponentProvider\ndocking.DialogComponentProviderPopupActionManager\ndocking.DisabledComponentLayerFactory\ndocking.dnd.DragDropManager\ndocking.dnd.DragDropNode\ndocking.dnd.DragDropTreeTransferable\ndocking.dnd.Draggable\ndocking.dnd.DragGestureAdapter\ndocking.dnd.DragSrcAdapter\ndocking.dnd.Droppable\ndocking.dnd.DropTgtAdapter\ndocking.dnd.GClipboard\ndocking.dnd.GenericDataFlavor\ndocking.dnd.GhidraTransferable\ndocking.dnd.ImageTransferable\ndocking.dnd.StringTransferable\ndocking.DockableComponent\ndocking.DockableHeader\ndocking.DockableHeader.EmphasizeDockableComponentAnimationDriver\ndocking.DockingActionProxy\ndocking.DockingCheckBoxMenuItem\ndocking.DockingContextListener\ndocking.DockingDialog\ndocking.DockingErrorDisplay\ndocking.DockingFrame\ndocking.DockingKeyBindingAction\ndocking.DockingMenuItem\ndocking.DockingUtils\ndocking.DockingUtils.ComponentCallback\ndocking.DockingUtils.TreeTraversalOrder\ndocking.DockingUtils.TreeTraversalResult\ndocking.DockingWindowListener\ndocking.DockingWindowManager\ndocking.DockingWindowManagerTestUtils\ndocking.DropTargetFactory\ndocking.DropTargetHandler\ndocking.EditListener\ndocking.EditWindow\ndocking.EmptyBorderToggleButton\ndocking.ErrLogDialog\ndocking.ErrLogExpandableDialog\ndocking.ErrorReporter\ndocking.event.mouse.GMouseListenerAdapter\ndocking.ExecutableAction\ndocking.FocusOwnerProvider\ndocking.framework.AboutDialog\ndocking.framework.ApplicationInformationDisplayFactory\ndocking.framework.DockingApplicationConfiguration\ndocking.framework.DockingApplicationLayout\ndocking.framework.SplashScreen\ndocking.GenericHeader\ndocking.GenericHeader.TitleFlasher\ndocking.GenericHeader.TitlePanel\ndocking.GlobalMenuAndToolBarManager\ndocking.HeaderCursor\ndocking.help.CustomFavoritesView\ndocking.help.CustomSearchView\ndocking.help.CustomTOCView\ndocking.help.CustomTOCView.CustomDefaultTOCFactory\ndocking.help.CustomTOCView.CustomTreeItemDecorator\ndocking.help.GHelpBroker\ndocking.help.GHelpClassLoader\ndocking.help.GHelpHTMLEditorKit\ndocking.help.GHelpSet\ndocking.help.Help\ndocking.help.HelpActionManager\ndocking.help.HelpDescriptor\ndocking.help.HelpManager\ndocking.help.HelpService\ndocking.help.TestHelpService\ndocking.help.ToggleNavigationAid\ndocking.HiddenDockingFrame\ndocking.KeyBindingOverrideKeyEventDispatcher\ndocking.KeyBindingPrecedence\ndocking.KeyEntryListener\ndocking.KeyEntryTextField\ndocking.menu.ActionState\ndocking.menu.DialogToolbarButton\ndocking.menu.DockingCheckboxMenuItemUI\ndocking.menu.DockingMenuItemUI\ndocking.menu.DockingMenuItemUI.MenuTabulator\ndocking.menu.DockingMenuItemUI.SwitchGraphics2D\ndocking.menu.DockingMenuUI\ndocking.menu.keys.MenuKeyProcessor\ndocking.menu.MenuBarManager\ndocking.menu.MenuGroupListener\ndocking.menu.MenuGroupMap\ndocking.menu.MenuHandler\ndocking.menu.MenuManager\ndocking.menu.MultiActionDockingAction\ndocking.menu.MultipleActionDockingToolbarButton\ndocking.menu.MultiStateDockingAction\ndocking.menu.NonToolbarMultiStateAction\ndocking.menu.ToolBarItemManager\ndocking.menu.ToolBarManager\ndocking.MenuBarMenuHandler\ndocking.MultiActionDialog\ndocking.options.editor.BooleanEditor\ndocking.options.editor.ButtonPanelFactory\ndocking.options.editor.ColorEditor\ndocking.options.editor.CustomOptionComponent\ndocking.options.editor.DateEditor\ndocking.options.editor.DefaultOptionComponent\ndocking.options.editor.EditorInitializer\ndocking.options.editor.FileChooserEditor\ndocking.options.editor.FontPropertyEditor\ndocking.options.editor.GenericOptionsComponent\ndocking.options.editor.GhidraColorChooser\ndocking.options.editor.IntEditor\ndocking.options.editor.OptionsDialog\ndocking.options.editor.OptionsEditorListener\ndocking.options.editor.OptionsEditorPanel\ndocking.options.editor.OptionsPanel\ndocking.options.editor.OptionsPanel.OptionsDataTransformer\ndocking.options.editor.ScrollableOptionsEditor\ndocking.options.editor.SettableColorSwatchChooserPanel\ndocking.options.editor.StringBasedFileEditor\ndocking.options.editor.StringEditor\ndocking.options.editor.StringWithChoicesEditor\ndocking.PlaceholderInstaller\ndocking.PopupActionManager\ndocking.PopupMenuContext\ndocking.PopupMenuHandler\ndocking.resources.icons.NumberIcon\ndocking.ShowAllComponentsAction\ndocking.SplitPanel\ndocking.StatusBar\ndocking.StatusBarSpacer\ndocking.TaskScheduler\ndocking.test.AbstractDockingTest\ndocking.test.TestFailingErrorDisplayWrapper\ndocking.test.TestKeyEventDispatcher\ndocking.Tool\ndocking.tool.ToolConstants\ndocking.tool.util.DockingToolConstants\ndocking.UndoRedoKeeper\ndocking.util.AnimatedIcon\ndocking.util.AnimationPainter\ndocking.util.AnimationUtils\ndocking.util.AnimationUtils.BasicAnimationDriver\ndocking.util.AnimationUtils.BasicAnimationPainter\ndocking.util.AnimationUtils.ComponentToComponentDriver\ndocking.util.AnimationUtils.DragonImageDriver\ndocking.util.AnimationUtils.FocusDriver\ndocking.util.AnimationUtils.PointToComponentDriver\ndocking.util.AnimationUtils.PulseDriver\ndocking.util.AnimationUtils.RotateDriver\ndocking.util.AnimationUtils.ShakeDriver\ndocking.util.AnimationUtils.SwingAnimationCallbackDriver\ndocking.util.BadgedIcon\ndocking.util.BadgedIcon.BadgePosition\ndocking.util.GraphicsUtils\ndocking.util.image.Callout\ndocking.util.image.CalloutComponentInfo\ndocking.util.image.DropShadow\ndocking.util.image.ToolIconURL\ndocking.util.SwingAnimationCallback\ndocking.widgets.AbstractGCellRenderer\ndocking.widgets.autocomplete.AutocompletionCellRenderer\ndocking.widgets.autocomplete.AutocompletionEvent\ndocking.widgets.autocomplete.AutocompletionListener\ndocking.widgets.autocomplete.AutocompletionModel\ndocking.widgets.autocomplete.TextFieldAutocompleter\ndocking.widgets.autocomplete.TextFieldAutocompleter.DualTextAutocompleterDemo\ndocking.widgets.autocomplete.TextFieldAutocompleter.MyListener\ndocking.widgets.autocomplete.TextFieldAutocompleter.TextFieldAutocompleterDemo\ndocking.widgets.AutoLookup\ndocking.widgets.button.GRadioButton\ndocking.widgets.checkbox.GCheckBox\ndocking.widgets.checkbox.GHtmlCheckBox\ndocking.widgets.combobox.GComboBox\ndocking.widgets.combobox.GhidraComboBox\ndocking.widgets.combobox.GhidraComboBox.InterceptedInputDocument\ndocking.widgets.conditiontestpanel.ConditionResult\ndocking.widgets.conditiontestpanel.ConditionStatus\ndocking.widgets.conditiontestpanel.ConditionTester\ndocking.widgets.conditiontestpanel.ConditionTestListener\ndocking.widgets.conditiontestpanel.ConditionTestModel\ndocking.widgets.conditiontestpanel.ConditionTestPanel\ndocking.widgets.conditiontestpanel.ConditionTestState\ndocking.widgets.CursorPosition\ndocking.widgets.DataToStringConverter\ndocking.widgets.DefaultDropDownSelectionDataModel\ndocking.widgets.DialogRememberOption\ndocking.widgets.dialogs.AbstractNumberInputDialog\ndocking.widgets.dialogs.BigIntegerNumberInputDialog\ndocking.widgets.dialogs.InputDialog\ndocking.widgets.dialogs.InputDialogListener\ndocking.widgets.dialogs.InputWithChoicesDialog\ndocking.widgets.dialogs.MultiLineInputDialog\ndocking.widgets.dialogs.MultiLineMessageDialog\ndocking.widgets.dialogs.NumberInputDialog\ndocking.widgets.dialogs.NumberRangeInputDialog\ndocking.widgets.dialogs.ObjectChooserDialog\ndocking.widgets.dialogs.ReadTextDialog\ndocking.widgets.dialogs.SettingsDialog\ndocking.widgets.dialogs.StringChoices\ndocking.widgets.dialogs.TableChooserDialog\ndocking.widgets.dialogs.TableSelectionDialog\ndocking.widgets.DropDownMultiSelectionChoiceListener\ndocking.widgets.DropDownMultiSelectionTextField\ndocking.widgets.DropDownSelectionChoiceListener\ndocking.widgets.DropDownSelectionTextField\ndocking.widgets.DropDownTextField\ndocking.widgets.DropDownTextFieldDataModel\ndocking.widgets.EmptyBorderButton\ndocking.widgets.EventTrigger\ndocking.widgets.fieldpanel.field.AbstractTextFieldElement\ndocking.widgets.fieldpanel.field.AttributedString\ndocking.widgets.fieldpanel.field.ClippingTextField\ndocking.widgets.fieldpanel.field.CompositeAttributedString\ndocking.widgets.fieldpanel.field.CompositeFieldElement\ndocking.widgets.fieldpanel.field.CompositeVerticalLayoutTextField\ndocking.widgets.fieldpanel.field.EmptyTextField\ndocking.widgets.fieldpanel.field.Field\ndocking.widgets.fieldpanel.field.FieldElement\ndocking.widgets.fieldpanel.field.FlowLayoutTextField\ndocking.widgets.fieldpanel.field.ReverseClippingTextField\ndocking.widgets.fieldpanel.field.SimpleImageField\ndocking.widgets.fieldpanel.field.SimpleTextField\ndocking.widgets.fieldpanel.field.StrutFieldElement\ndocking.widgets.fieldpanel.field.TextField\ndocking.widgets.fieldpanel.field.TextFieldElement\ndocking.widgets.fieldpanel.field.VerticalLayoutTextField\ndocking.widgets.fieldpanel.field.WrappingVerticalLayoutTextField\ndocking.widgets.fieldpanel.FieldPanel\ndocking.widgets.fieldpanel.FieldPanel.BigFieldPanelMouseWheelListener\ndocking.widgets.fieldpanel.FieldPanel.CursorHandler\ndocking.widgets.fieldpanel.FieldPanel.FieldPanelFocusListener\ndocking.widgets.fieldpanel.FieldPanel.FieldPanelMouseAdapter\ndocking.widgets.fieldpanel.FieldPanel.FieldPanelMouseMotionAdapter\ndocking.widgets.fieldpanel.FieldPanel.MouseHandler\ndocking.widgets.fieldpanel.FieldPanelOverLayoutEvent\ndocking.widgets.fieldpanel.FieldPanelOverLayoutListener\ndocking.widgets.fieldpanel.FieldPanelOverLayoutManager\ndocking.widgets.fieldpanel.HoverHandler\ndocking.widgets.fieldpanel.internal.AnchoredLayoutHandler\ndocking.widgets.fieldpanel.internal.ColorRangeMap\ndocking.widgets.fieldpanel.internal.CursorBlinker\ndocking.widgets.fieldpanel.internal.DefaultBackgroundColorModel\ndocking.widgets.fieldpanel.internal.EmptyBigLayoutModel\ndocking.widgets.fieldpanel.internal.EmptyFieldBackgroundColorManager\ndocking.widgets.fieldpanel.internal.EmptyLayoutBackgroundColorManager\ndocking.widgets.fieldpanel.internal.FieldBackgroundColorManager\ndocking.widgets.fieldpanel.internal.FieldPanelCoordinator\ndocking.widgets.fieldpanel.internal.FullySelectedFieldBackgroundColorManager\ndocking.widgets.fieldpanel.internal.LayoutBackgroundColorManager\ndocking.widgets.fieldpanel.internal.LayoutBackgroundColorManagerAdapter\ndocking.widgets.fieldpanel.internal.LayoutColorMapFactory\ndocking.widgets.fieldpanel.internal.LayoutLockedFieldPanelCoordinator\ndocking.widgets.fieldpanel.internal.LineLockedFieldPanelCoordinator\ndocking.widgets.fieldpanel.internal.MixedFieldBackgroundColorManager\ndocking.widgets.fieldpanel.internal.MixedLayoutBackgroundColorManager\ndocking.widgets.fieldpanel.internal.PaintContext\ndocking.widgets.fieldpanel.internal.TestBigLayoutModel\ndocking.widgets.fieldpanel.Layout\ndocking.widgets.fieldpanel.LayoutModel\ndocking.widgets.fieldpanel.LayoutModelIterator\ndocking.widgets.fieldpanel.listener.FieldInputListener\ndocking.widgets.fieldpanel.listener.FieldListener\ndocking.widgets.fieldpanel.listener.FieldLocationListener\ndocking.widgets.fieldpanel.listener.FieldMouseListener\ndocking.widgets.fieldpanel.listener.FieldOverlayListener\ndocking.widgets.fieldpanel.listener.FieldSelectionListener\ndocking.widgets.fieldpanel.listener.IndexMapper\ndocking.widgets.fieldpanel.listener.LayoutListener\ndocking.widgets.fieldpanel.listener.LayoutModelListener\ndocking.widgets.fieldpanel.listener.ViewListener\ndocking.widgets.fieldpanel.support.AnchoredLayout\ndocking.widgets.fieldpanel.support.BackgroundColorModel\ndocking.widgets.fieldpanel.support.DefaultRowColLocation\ndocking.widgets.fieldpanel.support.FieldLocation\ndocking.widgets.fieldpanel.support.FieldRange\ndocking.widgets.fieldpanel.support.FieldSelection\ndocking.widgets.fieldpanel.support.FieldSelectionHelper\ndocking.widgets.fieldpanel.support.FieldUtils\ndocking.widgets.fieldpanel.support.Highlight\ndocking.widgets.fieldpanel.support.HighlightFactory\ndocking.widgets.fieldpanel.support.HoverProvider\ndocking.widgets.fieldpanel.support.MultiRowLayout\ndocking.widgets.fieldpanel.support.RowColLocation\ndocking.widgets.fieldpanel.support.RowLayout\ndocking.widgets.fieldpanel.support.SingleRowLayout\ndocking.widgets.fieldpanel.support.ViewerPosition\ndocking.widgets.filechooser.FileChooserToggleButton\ndocking.widgets.filechooser.FileDropDownSelectionDataModel\ndocking.widgets.filechooser.GhidraFile\ndocking.widgets.filechooser.GhidraFileChooser\ndocking.widgets.filechooser.GhidraFileChooserDirectoryModelIf\ndocking.widgets.filechooser.GhidraFileChooserMode\ndocking.widgets.filechooser.GhidraFileChooserPanel\ndocking.widgets.filechooser.GhidraFileChooserPanelListener\ndocking.widgets.filechooser.LocalFileChooserModel\ndocking.widgets.filter.AbstractPatternTextFilter\ndocking.widgets.filter.AbstractRegexBasedTermSplitter\ndocking.widgets.filter.CharacterTermSplitter\ndocking.widgets.filter.ClearFilterLabel\ndocking.widgets.filter.ContainsTextFilter\ndocking.widgets.filter.ContainsTextFilterFactory\ndocking.widgets.filter.FilterListener\ndocking.widgets.filter.FilterOptions\ndocking.widgets.filter.FilterOptionsEditorDialog\ndocking.widgets.filter.FilterTextField\ndocking.widgets.filter.FindsPatternTextFilter\ndocking.widgets.filter.InvertedTextFilter\ndocking.widgets.filter.MatchesExactlyTextFilter\ndocking.widgets.filter.MatchesExactlyTextFilterFactory\ndocking.widgets.filter.MatchesPatternTextFilter\ndocking.widgets.filter.MultitermEvaluationMode\ndocking.widgets.filter.RegularExpressionTextFilterFactory\ndocking.widgets.filter.StartsWithTextFilter\ndocking.widgets.filter.StartsWithTextFilterFactory\ndocking.widgets.filter.TermSplitter\ndocking.widgets.filter.TextFilter\ndocking.widgets.filter.TextFilterFactory\ndocking.widgets.filter.TextFilterStrategy\ndocking.widgets.FindDialog\ndocking.widgets.FindDialogSearcher\ndocking.widgets.GComponent\ndocking.widgets.GenericDateCellRenderer\ndocking.widgets.HyperlinkComponent\ndocking.widgets.imagepanel.actions.ResetTranslationAction\ndocking.widgets.imagepanel.actions.SaveImageAction\ndocking.widgets.imagepanel.actions.ZoomInAction\ndocking.widgets.imagepanel.actions.ZoomOutAction\ndocking.widgets.imagepanel.actions.ZoomResetAction\ndocking.widgets.imagepanel.ImagePanel\ndocking.widgets.indexedscrollpane.DefaultViewToIndexMapper\ndocking.widgets.indexedscrollpane.IndexedScrollable\ndocking.widgets.indexedscrollpane.IndexedScrollPane\ndocking.widgets.indexedscrollpane.IndexScrollListener\ndocking.widgets.indexedscrollpane.PreMappedViewToIndexMapper\ndocking.widgets.indexedscrollpane.UniformViewToIndexMapper\ndocking.widgets.indexedscrollpane.ViewToIndexMapper\ndocking.widgets.InlineComponentTitledPanel\ndocking.widgets.JTreeMouseListenerDelegate\ndocking.widgets.label.GDHtmlLabel\ndocking.widgets.label.GDLabel\ndocking.widgets.label.GHtmlLabel\ndocking.widgets.label.GIconLabel\ndocking.widgets.label.GLabel\ndocking.widgets.list.GList\ndocking.widgets.list.GListAutoLookup\ndocking.widgets.list.GListCellRenderer\ndocking.widgets.list.ListPanel\ndocking.widgets.list.ListRendererMouseEventForwarder\ndocking.widgets.ListSelectionDialog\ndocking.widgets.ListSelectionTableDialog\ndocking.widgets.MultiLineLabel\ndocking.widgets.numberformat.BoundedRangeDecimalFormatterFactory\ndocking.widgets.OkDialog\ndocking.widgets.OptionDialog\ndocking.widgets.OptionDialogBuilder\ndocking.widgets.PasswordChangeDialog\ndocking.widgets.PasswordDialog\ndocking.widgets.pathmanager.PathManager\ndocking.widgets.pathmanager.PathManagerListener\ndocking.widgets.pathmanager.PathnameTablePanel\ndocking.widgets.PopupKeyStorePasswordProvider\ndocking.widgets.PopupWindow\ndocking.widgets.ScrollableTextArea\ndocking.widgets.SearchLocation\ndocking.widgets.shapes.Location\ndocking.widgets.shapes.PopupWindowPlacer\ndocking.widgets.shapes.PopupWindowPlacerBuilder\ndocking.widgets.SideKickVerticalScrollbar\ndocking.widgets.SmallBorderButton\ndocking.widgets.spinner.IntegerSpinner\ndocking.widgets.tabbedpane.DockingTabRenderer\ndocking.widgets.table.AbstractDynamicTableColumn\ndocking.widgets.table.AbstractDynamicTableColumnStub\ndocking.widgets.table.AbstractGTableModel\ndocking.widgets.table.AbstractSortedTableModel\ndocking.widgets.table.AddRemoveListItem\ndocking.widgets.table.AddRemoveListItem.Type\ndocking.widgets.table.AnyObjectTableModel\ndocking.widgets.table.AutoscrollAdapter\ndocking.widgets.table.ChooseColumnsDialog\ndocking.widgets.table.ColumnAnnotation\ndocking.widgets.table.columnfilter.ColumnBasedTableFilter\ndocking.widgets.table.columnfilter.ColumnConstraintSet\ndocking.widgets.table.columnfilter.ColumnFilterSaveManager\ndocking.widgets.table.columnfilter.LogicOperation\ndocking.widgets.table.ColumnSortState\ndocking.widgets.table.ColumnSortState.SortDirection\ndocking.widgets.table.CombinedTableFilter\ndocking.widgets.table.ConfigurableColumnTableModel\ndocking.widgets.table.constraint.AtLeastColumnConstraint\ndocking.widgets.table.constraint.AtLeastDateColumnConstraint\ndocking.widgets.table.constraint.AtMostColumnConstraint\ndocking.widgets.table.constraint.AtMostDateColumnConstraint\ndocking.widgets.table.constraint.BooleanMatchColumnConstraint\ndocking.widgets.table.constraint.ColumnConstraint\ndocking.widgets.table.constraint.ColumnConstraintProvider\ndocking.widgets.table.constraint.ColumnData\ndocking.widgets.table.constraint.ColumnTypeMapper\ndocking.widgets.table.constraint.dialog.ColumnFilterArchiveDialog\ndocking.widgets.table.constraint.dialog.ColumnFilterData\ndocking.widgets.table.constraint.dialog.ColumnFilterDialog\ndocking.widgets.table.constraint.dialog.ColumnFilterDialogModel\ndocking.widgets.table.constraint.dialog.ConstraintFilterPanel\ndocking.widgets.table.constraint.dialog.DialogFilterCondition\ndocking.widgets.table.constraint.dialog.DialogFilterConditionSet\ndocking.widgets.table.constraint.dialog.DialogFilterRow\ndocking.widgets.table.constraint.dialog.FilterPanelLayout\ndocking.widgets.table.constraint.dialog.TableFilterDialogModelListener\ndocking.widgets.table.constraint.EnumColumnConstraint\ndocking.widgets.table.constraint.InDateRangeColumnConstraint\ndocking.widgets.table.constraint.InRangeColumnConstraint\ndocking.widgets.table.constraint.MappedColumnConstraint\ndocking.widgets.table.constraint.MappedColumnConstraint.DelegateColumnData\ndocking.widgets.table.constraint.NotInDateRangeColumnConstraint\ndocking.widgets.table.constraint.NotInRangeColumnConstraint\ndocking.widgets.table.constraint.ObjectToStringMapper\ndocking.widgets.table.constraint.provider.BooleanMatchColumnConstraintProvider\ndocking.widgets.table.constraint.provider.DateColumnConstraintProvider\ndocking.widgets.table.constraint.provider.DateColumnTypeMapper\ndocking.widgets.table.constraint.provider.EditorProvider\ndocking.widgets.table.constraint.provider.FloatColumnTypeMapper\ndocking.widgets.table.constraint.provider.IntegerEditorProvider\ndocking.widgets.table.constraint.provider.IntegerRangeEditorProvider\ndocking.widgets.table.constraint.provider.LongEditorProvider\ndocking.widgets.table.constraint.provider.LongRangeEditorProvider\ndocking.widgets.table.constraint.provider.NumberColumnConstraintProvider\ndocking.widgets.table.constraint.provider.StringColumnConstraintProvider\ndocking.widgets.table.constraint.RangeColumnConstraint\ndocking.widgets.table.constraint.SingleValueColumnConstraint\ndocking.widgets.table.constraint.StringColumnConstraint\ndocking.widgets.table.constraint.StringContainsColumnConstraint\ndocking.widgets.table.constraint.StringEndsWithColumnConstraint\ndocking.widgets.table.constraint.StringIsEmptyColumnConstraint\ndocking.widgets.table.constraint.StringIsNotEmptyColumnConstraint\ndocking.widgets.table.constraint.StringMatcherColumnConstraint\ndocking.widgets.table.constraint.StringNotContainsColumnConstraint\ndocking.widgets.table.constraint.StringNotEndsWithColumnConstraint\ndocking.widgets.table.constraint.StringNotStartsWithColumnConstraint\ndocking.widgets.table.constraint.StringStartsWithColumnConstraint\ndocking.widgets.table.constraint.TableFilterContext\ndocking.widgets.table.constrainteditor.AbstractColumnConstraintEditor\ndocking.widgets.table.constrainteditor.AutocompletingStringConstraintEditor\ndocking.widgets.table.constrainteditor.BooleanConstraintEditor\ndocking.widgets.table.constrainteditor.ColumnConstraintEditor\ndocking.widgets.table.constrainteditor.DataLoadingConstraintEditor\ndocking.widgets.table.constrainteditor.DateRangeConstraintEditor\ndocking.widgets.table.constrainteditor.DateSpinner\ndocking.widgets.table.constrainteditor.DateValueConstraintEditor\ndocking.widgets.table.constrainteditor.DoNothingColumnConstraintEditor\ndocking.widgets.table.constrainteditor.DoubleRangeConstraintEditor\ndocking.widgets.table.constrainteditor.DoubleValueConstraintEditor\ndocking.widgets.table.constrainteditor.DummyConstraintEditor\ndocking.widgets.table.constrainteditor.EnumConstraintEditor\ndocking.widgets.table.constrainteditor.IntegerConstraintEditor\ndocking.widgets.table.constrainteditor.IntegerRangeConstraintEditor\ndocking.widgets.table.constrainteditor.LocalDateSpinnerModel\ndocking.widgets.table.constrainteditor.LongConverter\ndocking.widgets.table.constrainteditor.MappedColumnConstraintEditor\ndocking.widgets.table.constrainteditor.StringConstraintEditor\ndocking.widgets.table.constrainteditor.UnsignedLongConstraintEditor\ndocking.widgets.table.constrainteditor.UnsignedLongConstraintEditorProvider\ndocking.widgets.table.constrainteditor.UnsignedLongRangeConstraintEditor\ndocking.widgets.table.constrainteditor.UnsignedLongRangeEditorProvider\ndocking.widgets.table.DefaultRowFilterTransformer\ndocking.widgets.table.DefaultTableCellRendererWrapper\ndocking.widgets.table.DefaultTableTextFilterFactory\ndocking.widgets.table.DiscoverableTableUtils\ndocking.widgets.table.DisplayStringProvider\ndocking.widgets.table.DynamicColumnTableModel\ndocking.widgets.table.DynamicColumnTableModel\ndocking.widgets.table.DynamicTableColumn\ndocking.widgets.table.DynamicTableColumnExtensionPoint\ndocking.widgets.table.DynamicTableModel\ndocking.widgets.table.FilterTypeConverter\ndocking.widgets.table.GBooleanCellRenderer\ndocking.widgets.table.GDynamicColumnTableModel\ndocking.widgets.table.GFilterTable\ndocking.widgets.table.GTable\ndocking.widgets.table.GTableAutoLookup\ndocking.widgets.table.GTableCellRenderer\ndocking.widgets.table.GTableCellRenderingData\ndocking.widgets.table.GTableColumnModel\ndocking.widgets.table.GTableFilterPanel\ndocking.widgets.table.GTableHeader\ndocking.widgets.table.GTableHeaderRenderer\ndocking.widgets.table.GTableMouseListener\ndocking.widgets.table.GTableTextCellEditor\ndocking.widgets.table.GTableToCSV\ndocking.widgets.table.GTableWidget\ndocking.widgets.table.InvertedTableFilter\ndocking.widgets.table.MappedTableColumn\ndocking.widgets.table.MultiTextFilterTableFilter\ndocking.widgets.table.ObjectSelectedListener\ndocking.widgets.table.RowFilterTransformer\ndocking.widgets.table.RowObject\ndocking.widgets.table.RowObjectFilterModel\ndocking.widgets.table.RowObjectSelectionManager\ndocking.widgets.table.RowObjectTableModel\ndocking.widgets.table.SelectColumnsDialog\ndocking.widgets.table.SelectionManager\ndocking.widgets.table.SelectionManager\ndocking.widgets.table.SelectionManagerListener\ndocking.widgets.table.SelectionStorage\ndocking.widgets.table.sort.ColumnRenderedValueBackupComparator\ndocking.widgets.table.sort.DefaultColumnComparator\ndocking.widgets.table.sort.RowBasedColumnComparator\ndocking.widgets.table.SortedTableModel\ndocking.widgets.table.SortListener\ndocking.widgets.table.TableColumnDescriptor\ndocking.widgets.table.TableColumnModelState\ndocking.widgets.table.TableComparators\ndocking.widgets.table.TableFilter\ndocking.widgets.table.TableItemPickedListener\ndocking.widgets.table.TableModelWrapper\ndocking.widgets.table.TableRowMapper\ndocking.widgets.table.TableSortingContext\ndocking.widgets.table.TableSortState\ndocking.widgets.table.TableSortStateEditor\ndocking.widgets.table.TableTextFilter\ndocking.widgets.table.TableTextFilterFactory\ndocking.widgets.table.TableUtils\ndocking.widgets.table.threaded.AddRemoveJob\ndocking.widgets.table.threaded.DefaultAddRemoveStrategy\ndocking.widgets.table.threaded.FilterJob\ndocking.widgets.table.threaded.GThreadedTablePanel\ndocking.widgets.table.threaded.IncrementalLoadJob\ndocking.widgets.table.threaded.LoadJob\ndocking.widgets.table.threaded.LoadSpecificDataJob\ndocking.widgets.table.threaded.NullTableFilter\ndocking.widgets.table.threaded.SortJob\ndocking.widgets.table.threaded.TableAddRemoveStrategy\ndocking.widgets.table.threaded.TableData\ndocking.widgets.table.threaded.TableUpdateJob\ndocking.widgets.table.threaded.ThreadedBackupRowComparator\ndocking.widgets.table.threaded.ThreadedTableColumnComparator\ndocking.widgets.table.threaded.ThreadedTableModel\ndocking.widgets.table.threaded.ThreadedTableModel.IncrementalLoadJobListener\ndocking.widgets.table.threaded.ThreadedTableModelListener\ndocking.widgets.table.threaded.ThreadedTableModelStub\ndocking.widgets.table.VariableColumnTableModel\ndocking.widgets.textarea.HintTextArea\ndocking.widgets.textfield.DecimalFormatterFactory\ndocking.widgets.textfield.GValidatedTextField\ndocking.widgets.textfield.GValidatedTextField.LongField\ndocking.widgets.textfield.GValidatedTextField.LongField.LongValidator\ndocking.widgets.textfield.GValidatedTextField.MaxLengthField\ndocking.widgets.textfield.GValidatedTextField.MaxLengthField.MaxLengthDocument\ndocking.widgets.textfield.GValidatedTextField.TextValidator\ndocking.widgets.textfield.GValidatedTextField.ValidatedDocument\ndocking.widgets.textfield.GValidatedTextField.ValidationFailedException\ndocking.widgets.textfield.GValidatedTextField.ValidationMessageListener\ndocking.widgets.textfield.HexIntegerFormatter\ndocking.widgets.textfield.HexIntegerFormatter.HexAllowedPositiveValueIntgerDocumentFilterWrapper\ndocking.widgets.textfield.HexOrDecimalInput\ndocking.widgets.textfield.HintTextField\ndocking.widgets.textfield.IntegerFormatter\ndocking.widgets.textfield.IntegerFormatter.PosiviteValueIntegerDocumentFilterWrapper\ndocking.widgets.textfield.IntegerTextField\ndocking.widgets.textfield.LocalDateTextField\ndocking.widgets.textfield.TextFieldLinker\ndocking.widgets.textfield.TextFieldLinker.FieldState\ndocking.widgets.textfield.TextFieldLinker.LinkedField\ndocking.widgets.textfield.TextFieldLinker.LinkerState\ndocking.widgets.textpane.GHtmlTextPane\ndocking.widgets.tree.DefaultGTreeFilterProvider\ndocking.widgets.tree.GTree\ndocking.widgets.tree.GTreeFilterFactory\ndocking.widgets.tree.GTreeFilterProvider\ndocking.widgets.tree.GTreeFilterTask\ndocking.widgets.tree.GTreeLazyNode\ndocking.widgets.tree.GTreeNode\ndocking.widgets.tree.GTreeRestoreTreeStateTask\ndocking.widgets.tree.GTreeSlowLoadingNode\ndocking.widgets.tree.GTreeState\ndocking.widgets.tree.GTreeTask\ndocking.widgets.tree.GTreeTextFilterFactory\ndocking.widgets.tree.internal.DefaultGTreeDataTransformer\ndocking.widgets.tree.internal.GTreeDragNDropAdapter\ndocking.widgets.tree.internal.GTreeModel\ndocking.widgets.tree.internal.GTreeNodeListener\ndocking.widgets.tree.internal.GTreeSelectionModel\ndocking.widgets.tree.internal.InProgressGTreeNode\ndocking.widgets.tree.internal.InProgressGTreeRootNode\ndocking.widgets.tree.InvertedTreeFilter\ndocking.widgets.tree.MultiTextFilterTreeFilter\ndocking.widgets.tree.support.BreadthFirstIterator\ndocking.widgets.tree.support.CombinedGTreeFilter\ndocking.widgets.tree.support.DepthFirstIterator\ndocking.widgets.tree.support.GTreeCellEditor\ndocking.widgets.tree.support.GTreeDragNDropHandler\ndocking.widgets.tree.support.GTreeFilter\ndocking.widgets.tree.support.GTreeNodeTransferable\ndocking.widgets.tree.support.GTreeRenderer\ndocking.widgets.tree.support.GTreeSelectionEvent\ndocking.widgets.tree.support.GTreeSelectionEvent.EventOrigin\ndocking.widgets.tree.support.GTreeSelectionListener\ndocking.widgets.tree.support.GTreeTransferHandler\ndocking.widgets.tree.support.NewTestApp\ndocking.widgets.tree.tasks.GTreeBulkTask\ndocking.widgets.tree.tasks.GTreeClearSelectionTask\ndocking.widgets.tree.tasks.GTreeClearTreeFilterTask\ndocking.widgets.tree.tasks.GTreeCollapseAllTask\ndocking.widgets.tree.tasks.GTreeExpandAllTask\ndocking.widgets.tree.tasks.GTreeExpandNodeToDepthTask\ndocking.widgets.tree.tasks.GTreeExpandPathsTask\ndocking.widgets.tree.tasks.GTreeLoadChildrenTask\ndocking.widgets.tree.tasks.GTreeSelectNodeByNameTask\ndocking.widgets.tree.tasks.GTreeSelectPathsTask\ndocking.widgets.tree.tasks.GTreeStartEditingTask\ndocking.widgets.tree.TreeTaskMonitor\ndocking.widgets.tree.TreeTextFilter\ndocking.widgets.VariableHeightPanel\ndocking.WindowActionManager\ndocking.WindowNode\ndocking.WindowPosition\ndocking.wizard.AbstractMageJPanel\ndocking.wizard.AbstractMagePanelManager\ndocking.wizard.AbstractWizardJPanel\ndocking.wizard.IllegalPanelStateException\ndocking.wizard.MagePanel\ndocking.wizard.PanelManager\ndocking.wizard.WizardContext\ndocking.wizard.WizardManager\ndocking.wizard.WizardPanel\ndocking.wizard.WizardPanelDisplayability\ndocking.wizard.WizardPanelListener\ndocking.wizard.WizardState\ndocking.wizard.WizardStateDependencyValidator\nedu.uci.ics.jung.algorithms.layout.AbstractLayout\nedu.uci.ics.jung.algorithms.layout.Layout\nedu.uci.ics.jung.graph.AbstractGraph\nedu.uci.ics.jung.graph.AbstractTypedGraph\nedu.uci.ics.jung.graph.DirectedSparseGraph\nedu.uci.ics.jung.visualization.BasicVisualizationServer\nedu.uci.ics.jung.visualization.control.AbstractGraphMousePlugin\nedu.uci.ics.jung.visualization.control.AbstractPopupGraphMousePlugin\nedu.uci.ics.jung.visualization.control.AnimatedPickingGraphMousePlugin\nedu.uci.ics.jung.visualization.control.SatelliteScalingGraphMousePlugin\nedu.uci.ics.jung.visualization.control.SatelliteVisualizationViewer\nedu.uci.ics.jung.visualization.control.ScalingGraphMousePlugin\nedu.uci.ics.jung.visualization.picking.ShapePickSupport\nedu.uci.ics.jung.visualization.renderers.BasicEdgeLabelRenderer\nedu.uci.ics.jung.visualization.renderers.BasicEdgeRenderer\nedu.uci.ics.jung.visualization.renderers.BasicRenderer\nedu.uci.ics.jung.visualization.renderers.BasicVertexRenderer\nedu.uci.ics.jung.visualization.renderers.DefaultEdgeLabelRenderer\nedu.uci.ics.jung.visualization.VisualizationViewer\nEnum\nfoundation.FoundationInitializer\ngeneric.algorithms.CRC64\ngeneric.algorithms.Lcs\ngeneric.algorithms.ReducingLcs\ngeneric.algorithms.ReducingListBasedLcs\ngeneric.cache.BasicFactory\ngeneric.cache.CachingPool\ngeneric.cache.CountingBasicFactory\ngeneric.cache.Factory\ngeneric.cache.FixedSizeMRUCachingFactory\ngeneric.complex.Complex\ngeneric.concurrent.ConcurrentGraphQ\ngeneric.concurrent.ConcurrentListenerSet\ngeneric.concurrent.ConcurrentQ\ngeneric.concurrent.ConcurrentQBuilder\ngeneric.concurrent.GThreadPool\ngeneric.concurrent.io.IOResult\ngeneric.concurrent.io.ProcessConsumer\ngeneric.concurrent.QCallback\ngeneric.concurrent.QItemListener\ngeneric.concurrent.QProgressListener\ngeneric.concurrent.QResult\ngeneric.concurrent.QRunnable\ngeneric.concurrent.QRunnableAdapter\ngeneric.constraint.Constraint\ngeneric.constraint.ConstraintData\ngeneric.constraint.Decision\ngeneric.constraint.DecisionNode\ngeneric.constraint.DecisionSet\ngeneric.constraint.DecisionTree\ngeneric.constraint.RootDecisionNode\ngeneric.continues.ContinuesFactory\ngeneric.continues.DoNotContinue\ngeneric.continues.ExceptionHandler\ngeneric.continues.GenericFactory\ngeneric.continues.RethrowContinuesFactory\ngeneric.continues.RethrowExceptionHandler\ngeneric.DominantPair\ngeneric.FilteredIterator\ngeneric.hash.AbstractMessageDigest\ngeneric.hash.FNV1a32MessageDigest\ngeneric.hash.FNV1a32MessageDigestFactory\ngeneric.hash.FNV1a64MessageDigest\ngeneric.hash.FNV1a64MessageDigestFactory\ngeneric.hash.MessageDigest\ngeneric.hash.MessageDigestFactory\ngeneric.hash.SimpleCRC32\ngeneric.Images\ngeneric.init.GenericApplicationSettings\ngeneric.init.GenericInitializer\ngeneric.io.JarWriter\ngeneric.io.NullPrintWriter\ngeneric.io.NullWriter\ngeneric.jar.ApplicationModule\ngeneric.jar.ClassModuleTree\ngeneric.jar.FileResource\ngeneric.jar.GClassLoader\ngeneric.jar.JarEntryFilter\ngeneric.jar.JarEntryNode\ngeneric.jar.JarEntryRootNode\ngeneric.jar.JarResource\ngeneric.jar.Resource\ngeneric.jar.ResourceFile\ngeneric.jar.ResourceFileFilter\ngeneric.json.Json\ngeneric.json.Json.JsonWithNewlinesToStringStyle\ngeneric.json.JSONError\ngeneric.json.JSONParser\ngeneric.json.JSONToken\ngeneric.json.JSONType\ngeneric.lsh.KandL\ngeneric.lsh.LSHMemoryModel\ngeneric.lsh.Partition\ngeneric.lsh.vector.HashEntry\ngeneric.lsh.vector.IDFLookup\ngeneric.lsh.vector.IDFLookup.IDFEntry\ngeneric.lsh.vector.LSHCosineVector\ngeneric.lsh.vector.LSHCosineVectorAccum\ngeneric.lsh.vector.LSHCosineVectorAccum.Entry\ngeneric.lsh.vector.LSHVector\ngeneric.lsh.vector.LSHVectorFactory\ngeneric.lsh.vector.VectorCompare\ngeneric.lsh.vector.WeightedLSHCosineVectorFactory\ngeneric.lsh.vector.WeightFactory\ngeneric.random.SecureRandomFactory\ngeneric.stl.Algorithms\ngeneric.stl.ComparableMapSTL\ngeneric.stl.ComparableMultiMapSTL\ngeneric.stl.ComparableMultiSetSTL\ngeneric.stl.ComparableSetSTL\ngeneric.stl.EmptyIteratorSTL\ngeneric.stl.IteratorSTL\ngeneric.stl.ListIterator\ngeneric.stl.ListNodeSTL\ngeneric.stl.ListSTL\ngeneric.stl.MapIteratorSTL\ngeneric.stl.MapSTL\ngeneric.stl.MultiMapSTL\ngeneric.stl.MultiSetSTL\ngeneric.stl.Pair\ngeneric.stl.Quad\ngeneric.stl.RedBlackNode\ngeneric.stl.RedBlackTree\ngeneric.stl.ReverseMapIteratorSTL\ngeneric.stl.ReverseSetIterator\ngeneric.stl.SelfComparator\ngeneric.stl.SetIterator\ngeneric.stl.SetSTL\ngeneric.stl.UnmodifiableListIteratorSTL\ngeneric.stl.VectorIterator\ngeneric.stl.VectorSTL\ngeneric.test.AbstractGenericTest\ngeneric.test.AbstractGenericTest.ExceptionHandlingRunner\ngeneric.test.AbstractGTest\ngeneric.test.category.NightlyCategory\ngeneric.test.category.PortSensitiveCategory\ngeneric.test.ConcurrentTestExceptionHandler\ngeneric.test.ConcurrentTestExceptionStatement\ngeneric.test.TestExceptionTracker\ngeneric.test.TestReportingException\ngeneric.test.TestThread\ngeneric.test.TestUtils\ngeneric.text.TextLayoutGraphics\ngeneric.timer.ExpiringSwingTimer\ngeneric.timer.GhidraSwinglessTimer\ngeneric.timer.GhidraSwingTimer\ngeneric.timer.GhidraTimer\ngeneric.timer.GhidraTimerFactory\ngeneric.timer.TimerCallback\ngeneric.util.ArchiveBuilder\ngeneric.util.ArchiveExtractor\ngeneric.util.Beanify\ngeneric.util.ChannelLocker\ngeneric.util.DequePush\ngeneric.util.FileChannelLock\ngeneric.util.FileLocker\ngeneric.util.image.ImageUtils\ngeneric.util.JarArchiveBuilder\ngeneric.util.LockFactory\ngeneric.util.MultiIterator\ngeneric.util.NamedDaemonThreadFactory\ngeneric.util.Path\ngeneric.util.PeekableIterator\ngeneric.util.UnsignedDataUtils\ngeneric.util.WindowUtilities\ngeneric.util.WrappingPeekableIterator\ngeneric.util.ZipArchiveBuilder\nghidra.app.actions.AbstractFindReferencesDataTypeAction\nghidra.app.actions.AbstractFindReferencesToAddressAction\nghidra.app.analyzers.AbstractBinaryFormatAnalyzer\nghidra.app.analyzers.AppleSingleDoubleAnalyzer\nghidra.app.analyzers.CoffAnalyzer\nghidra.app.analyzers.CoffArchiveAnalyzer\nghidra.app.analyzers.CondenseFillerBytesAnalyzer\nghidra.app.analyzers.ElfAnalyzer\nghidra.app.analyzers.MachoAnalyzer\nghidra.app.analyzers.PefAnalyzer\nghidra.app.analyzers.PortableExecutableAnalyzer\nghidra.app.cmd.analysis.SharedReturnAnalysisCmd\nghidra.app.cmd.comments.AppendCommentCmd\nghidra.app.cmd.comments.CodeUnitInfoPasteCmd\nghidra.app.cmd.comments.SetCommentCmd\nghidra.app.cmd.comments.SetCommentsCmd\nghidra.app.cmd.data.AbstractCreateStructureCmd\nghidra.app.cmd.data.CreateArrayCmd\nghidra.app.cmd.data.CreateArrayInStructureCmd\nghidra.app.cmd.data.CreateDataBackgroundCmd\nghidra.app.cmd.data.CreateDataCmd\nghidra.app.cmd.data.CreateDataInStructureBackgroundCmd\nghidra.app.cmd.data.CreateDataInStructureCmd\nghidra.app.cmd.data.CreateStringCmd\nghidra.app.cmd.data.CreateStructureCmd\nghidra.app.cmd.data.CreateStructureInStructureCmd\nghidra.app.cmd.data.RenameDataFieldCmd\nghidra.app.cmd.disassemble.ArmDisassembleCommand\nghidra.app.cmd.disassemble.DisassembleCommand\nghidra.app.cmd.disassemble.Hcs12DisassembleCommand\nghidra.app.cmd.disassemble.MipsDisassembleCommand\nghidra.app.cmd.disassemble.PowerPCDisassembleCommand\nghidra.app.cmd.disassemble.SetFlowOverrideCmd\nghidra.app.cmd.disassemble.X86_64DisassembleCommand\nghidra.app.cmd.equate.ClearEquateCmd\nghidra.app.cmd.equate.SetEquateCmd\nghidra.app.cmd.formats.AppleSingleDoubleBinaryAnalysisCommand\nghidra.app.cmd.formats.CoffArchiveBinaryAnalysisCommand\nghidra.app.cmd.formats.CoffBinaryAnalysisCommand\nghidra.app.cmd.formats.ElfBinaryAnalysisCommand\nghidra.app.cmd.formats.MachoBinaryAnalysisCommand\nghidra.app.cmd.formats.PefBinaryAnalysisCommand\nghidra.app.cmd.formats.PortableExecutableBinaryAnalysisCommand\nghidra.app.cmd.function.AddFunctionTagCmd\nghidra.app.cmd.function.AddMemoryParameterCommand\nghidra.app.cmd.function.AddMemoryVarCmd\nghidra.app.cmd.function.AddParameterCommand\nghidra.app.cmd.function.AddRegisterParameterCommand\nghidra.app.cmd.function.AddRegisterVarCmd\nghidra.app.cmd.function.AddStackParameterCommand\nghidra.app.cmd.function.AddStackVarCmd\nghidra.app.cmd.function.ApplyFunctionDataTypesCmd\nghidra.app.cmd.function.ApplyFunctionSignatureCmd\nghidra.app.cmd.function.CallDepthChangeInfo\nghidra.app.cmd.function.CaptureFunctionDataTypesCmd\nghidra.app.cmd.function.CaptureFunctionDataTypesListener\nghidra.app.cmd.function.ChangeFunctionTagCmd\nghidra.app.cmd.function.CreateExternalFunctionCmd\nghidra.app.cmd.function.CreateFunctionCmd\nghidra.app.cmd.function.CreateFunctionDefinitionCmd\nghidra.app.cmd.function.CreateFunctionTagCmd\nghidra.app.cmd.function.CreateMultipleFunctionsCmd\nghidra.app.cmd.function.CreateThunkFunctionCmd\nghidra.app.cmd.function.DecompilerParallelConventionAnalysisCmd\nghidra.app.cmd.function.DecompilerParameterIdCmd\nghidra.app.cmd.function.DecompilerSwitchAnalysisCmd\nghidra.app.cmd.function.DeleteFunctionCmd\nghidra.app.cmd.function.DeleteFunctionTagCmd\nghidra.app.cmd.function.DeleteVariableCmd\nghidra.app.cmd.function.FunctionPurgeAnalysisCmd\nghidra.app.cmd.function.FunctionResultStateStackAnalysisCmd\nghidra.app.cmd.function.FunctionStackAnalysisCmd\nghidra.app.cmd.function.NewFunctionStackAnalysisCmd\nghidra.app.cmd.function.RemoveFunctionTagCmd\nghidra.app.cmd.function.RemoveStackDepthChangeCommand\nghidra.app.cmd.function.SetFunctionNameCmd\nghidra.app.cmd.function.SetFunctionPurgeCommand\nghidra.app.cmd.function.SetFunctionRepeatableCommentCmd\nghidra.app.cmd.function.SetFunctionVarArgsCommand\nghidra.app.cmd.function.SetReturnDataTypeCmd\nghidra.app.cmd.function.SetStackDepthChangeCommand\nghidra.app.cmd.function.SetVariableCommentCmd\nghidra.app.cmd.function.SetVariableDataTypeCmd\nghidra.app.cmd.function.SetVariableNameCmd\nghidra.app.cmd.label.AddLabelCmd\nghidra.app.cmd.label.AddUniqueLabelCmd\nghidra.app.cmd.label.CreateNamespacesCmd\nghidra.app.cmd.label.DeleteLabelCmd\nghidra.app.cmd.label.DemanglerCmd\nghidra.app.cmd.label.ExternalEntryCmd\nghidra.app.cmd.label.PinSymbolCmd\nghidra.app.cmd.label.RenameLabelCmd\nghidra.app.cmd.label.SetLabelNamespaceCmd\nghidra.app.cmd.label.SetLabelPrimaryCmd\nghidra.app.cmd.memory.AddBitMappedMemoryBlockCmd\nghidra.app.cmd.memory.AddByteMappedMemoryBlockCmd\nghidra.app.cmd.memory.AddFileBytesMemoryBlockCmd\nghidra.app.cmd.memory.AddInitializedMemoryBlockCmd\nghidra.app.cmd.memory.AddUninitializedMemoryBlockCmd\nghidra.app.cmd.memory.DeleteBlockCmd\nghidra.app.cmd.memory.DeleteBlockListener\nghidra.app.cmd.memory.MoveBlockListener\nghidra.app.cmd.memory.MoveBlockTask\nghidra.app.cmd.module.AbstractModularizationCmd\nghidra.app.cmd.module.ComplexityDepthModularizationCmd\nghidra.app.cmd.module.CreateDefaultTreeCmd\nghidra.app.cmd.module.CreateFolderCommand\nghidra.app.cmd.module.CreateFragmentCmd\nghidra.app.cmd.module.DeleteTreeCmd\nghidra.app.cmd.module.DominanceModularizationCmd\nghidra.app.cmd.module.MergeFolderCmd\nghidra.app.cmd.module.ModuleAlgorithmCmd\nghidra.app.cmd.module.RenameCmd\nghidra.app.cmd.module.RenameTreeCmd\nghidra.app.cmd.module.ReorderModuleCmd\nghidra.app.cmd.module.SubroutineModelCmd\nghidra.app.cmd.refs.AddExternalNameCmd\nghidra.app.cmd.refs.AddMemRefCmd\nghidra.app.cmd.refs.AddMemRefsCmd\nghidra.app.cmd.refs.AddOffsetMemRefCmd\nghidra.app.cmd.refs.AddRegisterRefCmd\nghidra.app.cmd.refs.AddShiftedMemRefCmd\nghidra.app.cmd.refs.AddStackRefCmd\nghidra.app.cmd.refs.AssociateSymbolCmd\nghidra.app.cmd.refs.ClearExternalNameCmd\nghidra.app.cmd.refs.ClearFallThroughCmd\nghidra.app.cmd.refs.EditRefTypeCmd\nghidra.app.cmd.refs.RemoveAllReferencesCmd\nghidra.app.cmd.refs.RemoveExternalNameCmd\nghidra.app.cmd.refs.RemoveExternalRefCmd\nghidra.app.cmd.refs.RemoveReferenceCmd\nghidra.app.cmd.refs.SetExternalNameCmd\nghidra.app.cmd.refs.SetExternalRefCmd\nghidra.app.cmd.refs.SetFallThroughCmd\nghidra.app.cmd.refs.SetPrimaryRefCmd\nghidra.app.cmd.refs.UpdateExternalNameCmd\nghidra.app.cmd.register.SetRegisterCmd\nghidra.app.context.DataLocationListContext\nghidra.app.context.ListingActionContext\nghidra.app.context.ListingContextAction\nghidra.app.context.NavigatableActionContext\nghidra.app.context.NavigatableContextAction\nghidra.app.context.NavigatableRangeActionContext\nghidra.app.context.NavigationActionContext\nghidra.app.context.ProgramActionContext\nghidra.app.context.ProgramContextAction\nghidra.app.context.ProgramLocationActionContext\nghidra.app.context.ProgramLocationContextAction\nghidra.app.context.ProgramSymbolActionContext\nghidra.app.context.ProgramSymbolContextAction\nghidra.app.context.RestrictedAddressSetContext\nghidra.app.CorePluginPackage\nghidra.app.decompiler.ClangBreak\nghidra.app.decompiler.ClangCommentToken\nghidra.app.decompiler.ClangFieldToken\nghidra.app.decompiler.ClangFuncNameToken\nghidra.app.decompiler.ClangFuncProto\nghidra.app.decompiler.ClangFunction\nghidra.app.decompiler.ClangLabelToken\nghidra.app.decompiler.ClangLine\nghidra.app.decompiler.ClangNode\nghidra.app.decompiler.ClangOpToken\nghidra.app.decompiler.ClangReturnType\nghidra.app.decompiler.ClangStatement\nghidra.app.decompiler.ClangSyntaxToken\nghidra.app.decompiler.ClangToken\nghidra.app.decompiler.ClangTokenGroup\nghidra.app.decompiler.ClangTypeToken\nghidra.app.decompiler.ClangVariableDecl\nghidra.app.decompiler.ClangVariableToken\nghidra.app.decompiler.ClangXML\nghidra.app.decompiler.component.ApplyFunctionSignatureAction\nghidra.app.decompiler.component.BasicDecompilerCodeComparisonPanel\nghidra.app.decompiler.component.BasicDecompilerFieldPanelCoordinator\nghidra.app.decompiler.component.CDisplayPanel\nghidra.app.decompiler.component.ClangFieldElement\nghidra.app.decompiler.component.ClangHighlightController\nghidra.app.decompiler.component.ClangHighlightListener\nghidra.app.decompiler.component.ClangLayoutController\nghidra.app.decompiler.component.ClangTextField\nghidra.app.decompiler.component.DecompileData\nghidra.app.decompiler.component.DecompilerCallbackHandler\nghidra.app.decompiler.component.DecompilerCodeComparisonPanel\nghidra.app.decompiler.component.DecompilerController\nghidra.app.decompiler.component.DecompileResultsListener\nghidra.app.decompiler.component.DecompilerHoverProvider\nghidra.app.decompiler.component.DecompilerManager\nghidra.app.decompiler.component.DecompilerPanel\nghidra.app.decompiler.component.DecompilerUtils\nghidra.app.decompiler.component.DualDecompilerActionContext\nghidra.app.decompiler.component.DualDecompileResultsListener\nghidra.app.decompiler.component.DualDecompilerFieldPanelCoordinator\nghidra.app.decompiler.component.EmptyDecompileData\nghidra.app.decompiler.component.HighlightToken\nghidra.app.decompiler.component.hover.DataTypeDecompilerHover\nghidra.app.decompiler.component.hover.DataTypeDecompilerHoverPlugin\nghidra.app.decompiler.component.hover.DecompilerHoverService\nghidra.app.decompiler.component.hover.FunctionSignatureDecompilerHover\nghidra.app.decompiler.component.hover.FunctionSignatureDecompilerHoverPlugin\nghidra.app.decompiler.component.hover.ReferenceDecompilerHover\nghidra.app.decompiler.component.hover.ReferenceDecompilerHoverPlugin\nghidra.app.decompiler.component.hover.ScalarValueDecompilerHover\nghidra.app.decompiler.component.hover.ScalarValueDecompilerHoverPlugin\nghidra.app.decompiler.component.LocationClangHighlightController\nghidra.app.decompiler.component.NullClangHighlightController\nghidra.app.decompiler.component.TokenHighlightColors\nghidra.app.decompiler.component.TokenHighlights\nghidra.app.decompiler.DecompileCallback\nghidra.app.decompiler.DecompileCallback.StringData\nghidra.app.decompiler.DecompileDebug\nghidra.app.decompiler.DecompiledFunction\nghidra.app.decompiler.DecompileException\nghidra.app.decompiler.DecompileOptions\nghidra.app.decompiler.DecompileOptions.AliasBlockEnum\nghidra.app.decompiler.DecompileOptions.CommentStyleEnum\nghidra.app.decompiler.DecompileOptions.IntegerFormatEnum\nghidra.app.decompiler.DecompileOptions.NamespaceStrategy\nghidra.app.decompiler.DecompileProcess\nghidra.app.decompiler.DecompileProcess.DisposeState\nghidra.app.decompiler.DecompileProcessFactory\nghidra.app.decompiler.DecompilerDisposer\nghidra.app.decompiler.DecompileResults\nghidra.app.decompiler.DecompilerLocation\nghidra.app.decompiler.DecompInterface\nghidra.app.decompiler.flatapi.FlatDecompilerAPI\nghidra.app.decompiler.LimitedByteBuffer\nghidra.app.decompiler.parallel.ChunkingParallelDecompiler\nghidra.app.decompiler.parallel.DecompileConfigurer\nghidra.app.decompiler.parallel.DecompilerCallback\nghidra.app.decompiler.parallel.DecompilerMapFunction\nghidra.app.decompiler.parallel.DecompilerReducer\nghidra.app.decompiler.parallel.ParallelDecompiler\nghidra.app.decompiler.PrettyPrinter\nghidra.app.DeveloperPluginPackage\nghidra.app.emulator.Emulator\nghidra.app.emulator.EmulatorConfiguration\nghidra.app.emulator.EmulatorHelper\nghidra.app.emulator.memory.CompositeLoadImage\nghidra.app.emulator.memory.EmulatorLoadData\nghidra.app.emulator.memory.MemoryImage\nghidra.app.emulator.memory.MemoryLoadImage\nghidra.app.emulator.memory.ProgramLoadImage\nghidra.app.emulator.memory.ProgramMappedLoadImage\nghidra.app.emulator.memory.ProgramMappedMemory\nghidra.app.emulator.MemoryAccessFilter\nghidra.app.emulator.state.DumpMiscState\nghidra.app.emulator.state.FilteredMemoryPageOverlay\nghidra.app.emulator.state.FilteredRegisterBank\nghidra.app.emulator.state.RegisterState\nghidra.app.events.CloseProgramPluginEvent\nghidra.app.events.DualProgramLocationPluginEvent\nghidra.app.events.ExternalProgramLocationPluginEvent\nghidra.app.events.ExternalProgramSelectionPluginEvent\nghidra.app.events.ExternalReferencePluginEvent\nghidra.app.events.OpenProgramPluginEvent\nghidra.app.events.ProgramActivatedPluginEvent\nghidra.app.events.ProgramClosedPluginEvent\nghidra.app.events.ProgramHighlightPluginEvent\nghidra.app.events.ProgramLocationPluginEvent\nghidra.app.events.ProgramOpenedPluginEvent\nghidra.app.events.ProgramSelectionPluginEvent\nghidra.app.events.ProgramVisibilityChangePluginEvent\nghidra.app.events.TreeSelectionPluginEvent\nghidra.app.events.ViewChangedPluginEvent\nghidra.app.ExamplesPluginPackage\nghidra.app.factory.GhidraToolStateFactory\nghidra.app.GraphPluginPackage\nghidra.app.merge.DataTypeArchiveMergeManager\nghidra.app.merge.DataTypeArchiveMergeManagerPlugin\nghidra.app.merge.DataTypeManagerOwner\nghidra.app.merge.datatypes.DataTypeMergeManager\nghidra.app.merge.listing.ChoiceComponent\nghidra.app.merge.listing.CodeUnitDetails\nghidra.app.merge.listing.ConflictInfoPanel\nghidra.app.merge.listing.ConflictPanel\nghidra.app.merge.listing.ExternalConflictInfoPanel\nghidra.app.merge.listing.ExternalFunctionMerger\nghidra.app.merge.listing.ExternalFunctionMerger.ExternalConflictType\nghidra.app.merge.listing.ExternalProgramMerger\nghidra.app.merge.listing.ExternalsAddressTranslator\nghidra.app.merge.listing.FunctionTagListingMerger\nghidra.app.merge.listing.FunctionTagMerger\nghidra.app.merge.listing.ListingMergeConstants\nghidra.app.merge.listing.ListingMergeManager\nghidra.app.merge.listing.ProgramContextMergeManager\nghidra.app.merge.listing.ScrollingListChoicesPanel\nghidra.app.merge.listing.VariousChoicesPanel\nghidra.app.merge.listing.VerticalChoicesPanel\nghidra.app.merge.memory.MemoryMergeManager\nghidra.app.merge.MergeConstants\nghidra.app.merge.MergeManager\nghidra.app.merge.MergeManagerPlugin\nghidra.app.merge.MergeProgressModifier\nghidra.app.merge.MergeProgressPanel\nghidra.app.merge.MergeResolver\nghidra.app.merge.PhaseProgressPanel\nghidra.app.merge.ProgramMergeManagerPlugin\nghidra.app.merge.ProgramMultiUserMergeManager\nghidra.app.merge.ProgramSpecificAddressTranslator\nghidra.app.merge.propertylist.PropertyListMergeManager\nghidra.app.merge.tool.ListingMergePanel\nghidra.app.merge.tool.ListingMergePanelPlugin\nghidra.app.merge.tool.ListingMergePanelProvider\nghidra.app.merge.tool.ViewInstructionDetailsAction\nghidra.app.merge.tree.ProgramTreeMergeManager\nghidra.app.merge.util.ConflictCountPanel\nghidra.app.merge.util.ConflictUtility\nghidra.app.merge.util.MergeUtilities\nghidra.app.nav.DecoratorPanel\nghidra.app.nav.ListingPanelContainer\nghidra.app.nav.LocationMemento\nghidra.app.nav.Navigatable\nghidra.app.nav.NavigatableIconFactory\nghidra.app.nav.NavigatableRegistry\nghidra.app.nav.NavigatableRemovalListener\nghidra.app.nav.NavigationUtils\nghidra.app.nav.NextRangeAction\nghidra.app.nav.PreviousRangeAction\nghidra.app.plugin.assembler.Assembler\nghidra.app.plugin.assembler.AssemblerBuilder\nghidra.app.plugin.assembler.Assemblers\nghidra.app.plugin.assembler.AssemblyError\nghidra.app.plugin.assembler.AssemblyException\nghidra.app.plugin.assembler.AssemblySelectionError\nghidra.app.plugin.assembler.AssemblySelector\nghidra.app.plugin.assembler.AssemblySemanticException\nghidra.app.plugin.assembler.AssemblySyntaxException\nghidra.app.plugin.assembler.sleigh.expr.AbstractBinaryExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.AbstractUnaryExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.AndExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.ConstantValueSolver\nghidra.app.plugin.assembler.sleigh.expr.ContextFieldSolver\nghidra.app.plugin.assembler.sleigh.expr.DefaultSolverHint\nghidra.app.plugin.assembler.sleigh.expr.DivExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.EndInstructionValueSolver\nghidra.app.plugin.assembler.sleigh.expr.LeftShiftExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.MaskedLong\nghidra.app.plugin.assembler.sleigh.expr.MinusExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.MultExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.NeedsBackfillException\nghidra.app.plugin.assembler.sleigh.expr.NotExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.OperandValueSolver\nghidra.app.plugin.assembler.sleigh.expr.OrExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.PlusExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.RecursiveDescentSolver\nghidra.app.plugin.assembler.sleigh.expr.RightShiftExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.SolverException\nghidra.app.plugin.assembler.sleigh.expr.SolverHint\nghidra.app.plugin.assembler.sleigh.expr.StartInstructionValueSolver\nghidra.app.plugin.assembler.sleigh.expr.SubExpressionSolver\nghidra.app.plugin.assembler.sleigh.expr.TokenFieldSolver\nghidra.app.plugin.assembler.sleigh.expr.XorExpressionSolver\nghidra.app.plugin.assembler.sleigh.grammars.AbstractAssemblyGrammar\nghidra.app.plugin.assembler.sleigh.grammars.AbstractAssemblyProduction\nghidra.app.plugin.assembler.sleigh.grammars.AssemblyExtendedGrammar\nghidra.app.plugin.assembler.sleigh.grammars.AssemblyExtendedProduction\nghidra.app.plugin.assembler.sleigh.grammars.AssemblyGrammar\nghidra.app.plugin.assembler.sleigh.grammars.AssemblyGrammarException\nghidra.app.plugin.assembler.sleigh.grammars.AssemblyProduction\nghidra.app.plugin.assembler.sleigh.grammars.AssemblySentential\nghidra.app.plugin.assembler.sleigh.grammars.AssemblySentential.TruncatedWhiteSpaceParseToken\nghidra.app.plugin.assembler.sleigh.grammars.AssemblySentential.WhiteSpaceParseToken\nghidra.app.plugin.assembler.sleigh.parse.AssemblyFirstFollow\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseAcceptResult\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable.AcceptAction\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable.Action\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable.GotoAction\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable.ReduceAction\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseActionGotoTable.ShiftAction\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseErrorResult\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseMachine\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParser\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParser.MergeKey\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParser.MergeValue\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseResult\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseState\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseStateItem\nghidra.app.plugin.assembler.sleigh.parse.AssemblyParseTransitionTable\nghidra.app.plugin.assembler.sleigh.sem.AssemblyConstructorSemantic\nghidra.app.plugin.assembler.sleigh.sem.AssemblyContextGraph\nghidra.app.plugin.assembler.sleigh.sem.AssemblyContextGraph.Edge\nghidra.app.plugin.assembler.sleigh.sem.AssemblyContextGraph.Vertex\nghidra.app.plugin.assembler.sleigh.sem.AssemblyDefaultContext\nghidra.app.plugin.assembler.sleigh.sem.AssemblyPatternBlock\nghidra.app.plugin.assembler.sleigh.sem.AssemblyResolution\nghidra.app.plugin.assembler.sleigh.sem.AssemblyResolutionResults\nghidra.app.plugin.assembler.sleigh.sem.AssemblyResolvedBackfill\nghidra.app.plugin.assembler.sleigh.sem.AssemblyResolvedConstructor\nghidra.app.plugin.assembler.sleigh.sem.AssemblyResolvedError\nghidra.app.plugin.assembler.sleigh.sem.AssemblyTreeResolver\nghidra.app.plugin.assembler.sleigh.SleighAssembler\nghidra.app.plugin.assembler.sleigh.SleighAssemblerBuilder\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyEOI\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyExtendedNonTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyFixedNumericTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyNonTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyNumericMapTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyNumericTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyStringMapTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyStringTerminal\nghidra.app.plugin.assembler.sleigh.symbol.AssemblySymbol\nghidra.app.plugin.assembler.sleigh.symbol.AssemblyTerminal\nghidra.app.plugin.assembler.sleigh.tree.AssemblyParseBranch\nghidra.app.plugin.assembler.sleigh.tree.AssemblyParseNumericToken\nghidra.app.plugin.assembler.sleigh.tree.AssemblyParseToken\nghidra.app.plugin.assembler.sleigh.tree.AssemblyParseTreeNode\nghidra.app.plugin.assembler.sleigh.util.DbgTimer\nghidra.app.plugin.assembler.sleigh.util.DbgTimer.DbgCtx\nghidra.app.plugin.assembler.sleigh.util.DbgTimer.TabbingOutputStream\nghidra.app.plugin.assembler.sleigh.util.SleighUtil\nghidra.app.plugin.assembler.sleigh.util.TableEntry\nghidra.app.plugin.assembler.sleigh.util.TableEntryKey\nghidra.app.plugin.core.functioncompare.actions.AbstractApplyFunctionSignatureAction\nghidra.app.plugin.core.hover.AbstractConfigurableHover\nghidra.app.plugin.core.hover.AbstractHover\nghidra.app.plugin.core.hover.AbstractHoverProvider\nghidra.app.plugin.core.hover.AbstractReferenceHover\nghidra.app.plugin.core.hover.AbstractScalarOperandHover\nghidra.app.plugin.debug.dbtable.BinaryColumnAdapter\nghidra.app.plugin.debug.dbtable.BooleanColumnAdapter\nghidra.app.plugin.debug.dbtable.ByteColumnAdapter\nghidra.app.plugin.debug.dbtable.DbLargeTableModel\nghidra.app.plugin.debug.dbtable.DbSmallTableModel\nghidra.app.plugin.debug.dbtable.IntegerColumnAdapter\nghidra.app.plugin.debug.dbtable.LongColumnAdapter\nghidra.app.plugin.debug.dbtable.LongRenderer\nghidra.app.plugin.debug.dbtable.ShortColumnAdapter\nghidra.app.plugin.debug.dbtable.StringColumnAdapter\nghidra.app.plugin.debug.DbViewerPlugin\nghidra.app.plugin.debug.DbViewerProvider\nghidra.app.plugin.debug.DomainEventComponentProvider\nghidra.app.plugin.debug.DomainEventDisplayPlugin\nghidra.app.plugin.debug.DomainFolderChangesDisplayComponentProvider\nghidra.app.plugin.debug.DomainFolderChangesDisplayPlugin\nghidra.app.plugin.debug.EventDisplayComponentProvider\nghidra.app.plugin.debug.EventDisplayPlugin\nghidra.app.plugin.debug.GenerateOldLanguagePlugin\nghidra.app.plugin.debug.JavaHelpPlugin\nghidra.app.plugin.debug.MemoryUsagePlugin\nghidra.app.plugin.debug.propertymanager.PropertyManagerPlugin\nghidra.app.plugin.debug.propertymanager.PropertyManagerProvider\nghidra.app.plugin.exceptionhandlers.gcc.datatype.AbstractLeb128DataType\nghidra.app.plugin.exceptionhandlers.gcc.datatype.DwarfEncodingModeDataType\nghidra.app.plugin.exceptionhandlers.gcc.datatype.PcRelative31AddressDataType\nghidra.app.plugin.exceptionhandlers.gcc.datatype.SignedLeb128DataType\nghidra.app.plugin.exceptionhandlers.gcc.datatype.UnsignedLeb128DataType\nghidra.app.plugin.exceptionhandlers.gcc.DwarfDecodeContext\nghidra.app.plugin.exceptionhandlers.gcc.DwarfDecoderFactory\nghidra.app.plugin.exceptionhandlers.gcc.DwarfEHDataApplicationMode\nghidra.app.plugin.exceptionhandlers.gcc.DwarfEHDataDecodeFormat\nghidra.app.plugin.exceptionhandlers.gcc.DwarfEHDecoder\nghidra.app.plugin.exceptionhandlers.gcc.GccAnalysisClass\nghidra.app.plugin.exceptionhandlers.gcc.GccAnalysisUtils\nghidra.app.plugin.exceptionhandlers.gcc.GccExceptionAnalyzer\nghidra.app.plugin.exceptionhandlers.gcc.RegionDescriptor\nghidra.app.plugin.exceptionhandlers.gcc.sections.CieSource\nghidra.app.plugin.exceptionhandlers.gcc.sections.DebugFrameSection\nghidra.app.plugin.exceptionhandlers.gcc.sections.EhFrameHeaderSection\nghidra.app.plugin.exceptionhandlers.gcc.sections.EhFrameSection\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.Cie\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.DwarfCallFrameOpcodeParser\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.ExceptionHandlerFrameException\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.ExceptionHandlerFrameHeader\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.FdeTable\nghidra.app.plugin.exceptionhandlers.gcc.structures.ehFrame.FrameDescriptionEntry\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDAActionRecord\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDAActionTable\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDACallSiteRecord\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDACallSiteTable\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDAHeader\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDATable\nghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDATypeTable\nghidra.app.plugin.GenericPluginCategoryNames\nghidra.app.plugin.gui.LookAndFeelPlugin\nghidra.app.plugin.gui.WindowLocationPlugin\nghidra.app.plugin.languages.sleigh.ConstructorEntryVisitor\nghidra.app.plugin.languages.sleigh.PcodeOpEntryVisitor\nghidra.app.plugin.languages.sleigh.SleighConstructorTraversal\nghidra.app.plugin.languages.sleigh.SleighConstructorTraversal.SubVisitor\nghidra.app.plugin.languages.sleigh.SleighLanguages\nghidra.app.plugin.languages.sleigh.SleighLanguages.ConsVisitForPcode\nghidra.app.plugin.languages.sleigh.SubtableEntryVisitor\nghidra.app.plugin.languages.sleigh.VisitorResults\nghidra.app.plugin.match.AbstractFunctionHasher\nghidra.app.plugin.match.ExactBytesFunctionHasher\nghidra.app.plugin.match.ExactInstructionsFunctionHasher\nghidra.app.plugin.match.ExactMnemonicsFunctionHasher\nghidra.app.plugin.match.FunctionHasher\nghidra.app.plugin.match.FunctionMatchSet\nghidra.app.plugin.match.Match\nghidra.app.plugin.match.MatchData\nghidra.app.plugin.match.MatchedData\nghidra.app.plugin.match.MatchFunctions\nghidra.app.plugin.match.MatchFunctions.MatchedFunctions\nghidra.app.plugin.match.MatchSet\nghidra.app.plugin.match.MatchSymbol\nghidra.app.plugin.match.MatchSymbol.MatchedSymbol\nghidra.app.plugin.match.SubroutineMatch\nghidra.app.plugin.match.SubroutineMatchSet\nghidra.app.plugin.PluginCategoryNames\nghidra.app.plugin.processors.generic.BinaryExpression\nghidra.app.plugin.processors.generic.Constant\nghidra.app.plugin.processors.generic.ConstantTemplate\nghidra.app.plugin.processors.generic.ConstructorInfo\nghidra.app.plugin.processors.generic.ConstructorPcodeTemplate\nghidra.app.plugin.processors.generic.ExpressionTerm\nghidra.app.plugin.processors.generic.ExpressionValue\nghidra.app.plugin.processors.generic.Handle\nghidra.app.plugin.processors.generic.HandleTemplate\nghidra.app.plugin.processors.generic.Label\nghidra.app.plugin.processors.generic.MemoryBlockDefinition\nghidra.app.plugin.processors.generic.Offset\nghidra.app.plugin.processors.generic.Operand\nghidra.app.plugin.processors.generic.OperandValue\nghidra.app.plugin.processors.generic.OpTemplate\nghidra.app.plugin.processors.generic.PcodeFieldFactory\nghidra.app.plugin.processors.generic.Position\nghidra.app.plugin.processors.generic.SledException\nghidra.app.plugin.processors.generic.UnimplementedConstructor\nghidra.app.plugin.processors.generic.VarnodeTemplate\nghidra.app.plugin.processors.sleigh.Constructor\nghidra.app.plugin.processors.sleigh.ConstructState\nghidra.app.plugin.processors.sleigh.ContextCache\nghidra.app.plugin.processors.sleigh.ContextChange\nghidra.app.plugin.processors.sleigh.ContextCommit\nghidra.app.plugin.processors.sleigh.ContextOp\nghidra.app.plugin.processors.sleigh.DecisionNode\nghidra.app.plugin.processors.sleigh.expression.AndExpression\nghidra.app.plugin.processors.sleigh.expression.BinaryExpression\nghidra.app.plugin.processors.sleigh.expression.ConstantValue\nghidra.app.plugin.processors.sleigh.expression.ContextField\nghidra.app.plugin.processors.sleigh.expression.DivExpression\nghidra.app.plugin.processors.sleigh.expression.EndInstructionValue\nghidra.app.plugin.processors.sleigh.expression.LeftShiftExpression\nghidra.app.plugin.processors.sleigh.expression.MinusExpression\nghidra.app.plugin.processors.sleigh.expression.MultExpression\nghidra.app.plugin.processors.sleigh.expression.NotExpression\nghidra.app.plugin.processors.sleigh.expression.OperandValue\nghidra.app.plugin.processors.sleigh.expression.OrExpression\nghidra.app.plugin.processors.sleigh.expression.PatternExpression\nghidra.app.plugin.processors.sleigh.expression.PatternValue\nghidra.app.plugin.processors.sleigh.expression.PlusExpression\nghidra.app.plugin.processors.sleigh.expression.RightShiftExpression\nghidra.app.plugin.processors.sleigh.expression.StartInstructionValue\nghidra.app.plugin.processors.sleigh.expression.SubExpression\nghidra.app.plugin.processors.sleigh.expression.TokenField\nghidra.app.plugin.processors.sleigh.expression.UnaryExpression\nghidra.app.plugin.processors.sleigh.expression.XorExpression\nghidra.app.plugin.processors.sleigh.FixedHandle\nghidra.app.plugin.processors.sleigh.ModuleDefinitionsAdapter\nghidra.app.plugin.processors.sleigh.ModuleDefinitionsMap\nghidra.app.plugin.processors.sleigh.OpTplWalker\nghidra.app.plugin.processors.sleigh.ParserWalker\nghidra.app.plugin.processors.sleigh.pattern.CombinePattern\nghidra.app.plugin.processors.sleigh.pattern.ContextPattern\nghidra.app.plugin.processors.sleigh.pattern.DisjointPattern\nghidra.app.plugin.processors.sleigh.pattern.InstructionPattern\nghidra.app.plugin.processors.sleigh.pattern.OrPattern\nghidra.app.plugin.processors.sleigh.pattern.Pattern\nghidra.app.plugin.processors.sleigh.pattern.PatternBlock\nghidra.app.plugin.processors.sleigh.PcodeEmit\nghidra.app.plugin.processors.sleigh.PcodeEmitObjects\nghidra.app.plugin.processors.sleigh.PcodeEmitPacked\nghidra.app.plugin.processors.sleigh.PcodeEmitPacked.LabelRef\nghidra.app.plugin.processors.sleigh.SleighCompilerSpecDescription\nghidra.app.plugin.processors.sleigh.SleighDebugLogger\nghidra.app.plugin.processors.sleigh.SleighDebugLogger.SleighDebugMode\nghidra.app.plugin.processors.sleigh.SleighException\nghidra.app.plugin.processors.sleigh.SleighInstructionPrototype\nghidra.app.plugin.processors.sleigh.SleighInstructionPrototype.FlowRecord\nghidra.app.plugin.processors.sleigh.SleighInstructionPrototype.FlowSummary\nghidra.app.plugin.processors.sleigh.SleighLanguage\nghidra.app.plugin.processors.sleigh.SleighLanguageProvider\nghidra.app.plugin.processors.sleigh.SleighLanguageValidator\nghidra.app.plugin.processors.sleigh.SleighParserContext\nghidra.app.plugin.processors.sleigh.SpecExtensionEditor\nghidra.app.plugin.processors.sleigh.SpecExtensionPanel\nghidra.app.plugin.processors.sleigh.SpecExtensionPanel.ChangeExtensionTask\nghidra.app.plugin.processors.sleigh.SpecExtensionPanel.Status\nghidra.app.plugin.processors.sleigh.symbol.ContextSymbol\nghidra.app.plugin.processors.sleigh.symbol.EndSymbol\nghidra.app.plugin.processors.sleigh.symbol.EpsilonSymbol\nghidra.app.plugin.processors.sleigh.symbol.FamilySymbol\nghidra.app.plugin.processors.sleigh.symbol.NameSymbol\nghidra.app.plugin.processors.sleigh.symbol.OperandSymbol\nghidra.app.plugin.processors.sleigh.symbol.PatternlessSymbol\nghidra.app.plugin.processors.sleigh.symbol.SpecificSymbol\nghidra.app.plugin.processors.sleigh.symbol.StartSymbol\nghidra.app.plugin.processors.sleigh.symbol.SubtableSymbol\nghidra.app.plugin.processors.sleigh.symbol.Symbol\nghidra.app.plugin.processors.sleigh.symbol.SymbolScope\nghidra.app.plugin.processors.sleigh.symbol.SymbolTable\nghidra.app.plugin.processors.sleigh.symbol.TripleSymbol\nghidra.app.plugin.processors.sleigh.symbol.UseropSymbol\nghidra.app.plugin.processors.sleigh.symbol.ValueMapSymbol\nghidra.app.plugin.processors.sleigh.symbol.ValueSymbol\nghidra.app.plugin.processors.sleigh.symbol.VarnodeListSymbol\nghidra.app.plugin.processors.sleigh.symbol.VarnodeSymbol\nghidra.app.plugin.processors.sleigh.template.ConstructTpl\nghidra.app.plugin.processors.sleigh.template.ConstTpl\nghidra.app.plugin.processors.sleigh.template.HandleTpl\nghidra.app.plugin.processors.sleigh.template.OpTpl\nghidra.app.plugin.processors.sleigh.template.VarnodeTpl\nghidra.app.plugin.processors.sleigh.VarnodeData\nghidra.app.plugin.ProgramPlugin\nghidra.app.plugin.prototype.analysis.AggressiveInstructionFinderAnalyzer\nghidra.app.plugin.prototype.analysis.ArmAggressiveInstructionFinderAnalyzer\nghidra.app.plugin.prototype.debug.ScreenshotPlugin\nghidra.app.script.AskDialog\nghidra.app.script.GatherParamPanel\nghidra.app.script.GatherParamPanel.ParamComponent\nghidra.app.script.GhidraScript\nghidra.app.script.GhidraScript.AnalysisMode\nghidra.app.script.GhidraScriptConstants\nghidra.app.script.GhidraScriptInfoManager\nghidra.app.script.GhidraScriptProperties\nghidra.app.script.GhidraScriptProvider\nghidra.app.script.GhidraScriptUtil\nghidra.app.script.GhidraState\nghidra.app.script.ImproperUseException\nghidra.app.script.JavaScriptProvider\nghidra.app.script.MultipleOptionsDialog\nghidra.app.script.ResourceFileJavaFileManager\nghidra.app.script.ResourceFileJavaFileObject\nghidra.app.script.ScriptInfo\nghidra.app.script.ScriptMessage\nghidra.app.script.SelectLanguageDialog\nghidra.app.script.StringTransformer\nghidra.app.services.AbstractAnalyzer\nghidra.app.services.AnalysisPriority\nghidra.app.services.Analyzer\nghidra.app.services.AnalyzerAdapter\nghidra.app.services.AnalyzerType\nghidra.app.services.BlockModelService\nghidra.app.services.BlockModelServiceListener\nghidra.app.services.BookmarkService\nghidra.app.services.ButtonPressedListener\nghidra.app.services.ClipboardContentProviderService\nghidra.app.services.ClipboardService\nghidra.app.services.CodeFormatService\nghidra.app.services.CodeViewerService\nghidra.app.services.ConsoleService\nghidra.app.services.CoordinatedListingPanelListener\nghidra.app.services.DataService\nghidra.app.services.DataTypeManagerService\nghidra.app.services.DataTypeQueryService\nghidra.app.services.DataTypeReference\nghidra.app.services.DataTypeReferenceFinder\nghidra.app.services.EclipseIntegrationService\nghidra.app.services.FieldMouseHandlerService\nghidra.app.services.FileImporterService\nghidra.app.services.FileSystemBrowserService\nghidra.app.services.FunctionComparisonModel\nghidra.app.services.FunctionComparisonService\nghidra.app.services.GhidraScriptService\nghidra.app.services.GoToOverrideService\nghidra.app.services.GoToService\nghidra.app.services.GoToServiceListener\nghidra.app.services.GraphDisplayBroker\nghidra.app.services.HoverService\nghidra.app.services.MarkerDescriptor\nghidra.app.services.MarkerService\nghidra.app.services.MarkerSet\nghidra.app.services.MemorySearchService\nghidra.app.services.NavigationHistoryService\nghidra.app.services.ProgramCoordinator\nghidra.app.services.ProgramLocationPair\nghidra.app.services.ProgramManager\nghidra.app.services.ProgramTreeService\nghidra.app.services.QueryData\nghidra.app.services.StringTranslationService\nghidra.app.services.TextEditorService\nghidra.app.services.ViewManagerService\nghidra.app.services.ViewService\nghidra.app.tablechooser.AbstractColumnDisplay\nghidra.app.tablechooser.AbstractComparableColumnDisplay\nghidra.app.tablechooser.AddressableRowObject\nghidra.app.tablechooser.AddressableRowObjectToAddressTableRowMapper\nghidra.app.tablechooser.AddressableRowObjectToFunctionTableRowMapper\nghidra.app.tablechooser.AddressableRowObjectToProgramLocationTableRowMapper\nghidra.app.tablechooser.ColumnDisplay\nghidra.app.tablechooser.ColumnDisplayDynamicTableColumnAdapter\nghidra.app.tablechooser.StringColumnDisplay\nghidra.app.tablechooser.TableChooserDialog\nghidra.app.tablechooser.TableChooserExecutor\nghidra.app.tablechooser.TableChooserTableModel\nghidra.app.util.AddEditDialog\nghidra.app.util.AddEditDialog.NamespaceWrapper\nghidra.app.util.AddressFactoryService\nghidra.app.util.AddressInput\nghidra.app.util.AddressSetEditorPanel\nghidra.app.util.bean.FixedBitSizeValueField\nghidra.app.util.bean.SelectLanguagePanel\nghidra.app.util.bean.SelectLanguagePanelListener\nghidra.app.util.bean.SetEquateDialog\nghidra.app.util.bean.SetEquateDialog.EquateRowObject\nghidra.app.util.bean.SetEquateDialog.SelectionType\nghidra.app.util.bean.SetEquateTableModel\nghidra.app.util.bin.BinaryReader\nghidra.app.util.bin.ByteArrayConverter\nghidra.app.util.bin.ByteArrayProvider\nghidra.app.util.bin.ByteProvider\nghidra.app.util.bin.ByteProviderInputStream\nghidra.app.util.bin.ByteProviderInputStream.ClosingInputStream\nghidra.app.util.bin.ByteProviderPaddedInputStream\nghidra.app.util.bin.ByteProviderWrapper\nghidra.app.util.bin.EmptyByteProvider\nghidra.app.util.bin.FileByteProvider\nghidra.app.util.bin.FileBytesProvider\nghidra.app.util.bin.format.coff.AoutHeader\nghidra.app.util.bin.format.coff.AoutHeaderMagic\nghidra.app.util.bin.format.coff.AoutHeaderMIPS\nghidra.app.util.bin.format.coff.archive.CoffArchiveConstants\nghidra.app.util.bin.format.coff.archive.CoffArchiveHeader\nghidra.app.util.bin.format.coff.archive.CoffArchiveMemberHeader\nghidra.app.util.bin.format.coff.archive.FirstLinkerMember\nghidra.app.util.bin.format.coff.archive.LongNamesMember\nghidra.app.util.bin.format.coff.archive.SecondLinkerMember\nghidra.app.util.bin.format.coff.CoffConstants\nghidra.app.util.bin.format.coff.CoffException\nghidra.app.util.bin.format.coff.CoffFileHeader\nghidra.app.util.bin.format.coff.CoffFileHeaderFlag\nghidra.app.util.bin.format.coff.CoffFileHeaderTargetID\nghidra.app.util.bin.format.coff.CoffLineNumber\nghidra.app.util.bin.format.coff.CoffMachineType\nghidra.app.util.bin.format.coff.CoffRelocation\nghidra.app.util.bin.format.coff.CoffSectionHeader\nghidra.app.util.bin.format.coff.CoffSectionHeaderFlags\nghidra.app.util.bin.format.coff.CoffSectionHeaderReserved\nghidra.app.util.bin.format.coff.CoffSymbol\nghidra.app.util.bin.format.coff.CoffSymbolAux\nghidra.app.util.bin.format.coff.CoffSymbolAuxArray\nghidra.app.util.bin.format.coff.CoffSymbolAuxBeginningOfBlock\nghidra.app.util.bin.format.coff.CoffSymbolAuxEndOfBlock\nghidra.app.util.bin.format.coff.CoffSymbolAuxEndOfStruct\nghidra.app.util.bin.format.coff.CoffSymbolAuxFilename\nghidra.app.util.bin.format.coff.CoffSymbolAuxFunction\nghidra.app.util.bin.format.coff.CoffSymbolAuxName\nghidra.app.util.bin.format.coff.CoffSymbolAuxSection\nghidra.app.util.bin.format.coff.CoffSymbolAuxTagName\nghidra.app.util.bin.format.coff.CoffSymbolSectionNumber\nghidra.app.util.bin.format.coff.CoffSymbolSpecial\nghidra.app.util.bin.format.coff.CoffSymbolStorageClass\nghidra.app.util.bin.format.coff.CoffSymbolType\nghidra.app.util.bin.format.coff.relocation.CoffRelocationHandler\nghidra.app.util.bin.format.coff.relocation.CoffRelocationHandlerFactory\nghidra.app.util.bin.format.dwarf.DwarfSectionNames\nghidra.app.util.bin.format.dwarf.line.FileEntry\nghidra.app.util.bin.format.dwarf.line.StateMachine\nghidra.app.util.bin.format.dwarf.line.StatementProgramInstructions\nghidra.app.util.bin.format.dwarf.line.StatementProgramPrologue\nghidra.app.util.bin.format.dwarf4.attribs.DWARFAmbigNumericAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFAttributeFactory\nghidra.app.util.bin.format.dwarf4.attribs.DWARFAttributeValue\nghidra.app.util.bin.format.dwarf4.attribs.DWARFBlobAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFBooleanAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFDeferredStringAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFIndirectAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFNumericAttribute\nghidra.app.util.bin.format.dwarf4.attribs.DWARFStringAttribute\nghidra.app.util.bin.format.dwarf4.DebugInfoEntry\nghidra.app.util.bin.format.dwarf4.DIEAggregate\nghidra.app.util.bin.format.dwarf4.DWARFAbbreviation\nghidra.app.util.bin.format.dwarf4.DWARFAttributeSpecification\nghidra.app.util.bin.format.dwarf4.DWARFCompilationUnit\nghidra.app.util.bin.format.dwarf4.DWARFCompileUnit\nghidra.app.util.bin.format.dwarf4.DWARFException\nghidra.app.util.bin.format.dwarf4.DWARFLine\nghidra.app.util.bin.format.dwarf4.DWARFLine.DWARFFile\nghidra.app.util.bin.format.dwarf4.DWARFLocation\nghidra.app.util.bin.format.dwarf4.DWARFPreconditionException\nghidra.app.util.bin.format.dwarf4.DWARFRange\nghidra.app.util.bin.format.dwarf4.DWARFUtil\nghidra.app.util.bin.format.dwarf4.DWARFUtil.LengthResult\nghidra.app.util.bin.format.dwarf4.encoding.DWARFAccessibility\nghidra.app.util.bin.format.dwarf4.encoding.DWARFAttribute\nghidra.app.util.bin.format.dwarf4.encoding.DWARFChildren\nghidra.app.util.bin.format.dwarf4.encoding.DWARFEncoding\nghidra.app.util.bin.format.dwarf4.encoding.DWARFEndianity\nghidra.app.util.bin.format.dwarf4.encoding.DWARFForm\nghidra.app.util.bin.format.dwarf4.encoding.DWARFIdentifierCase\nghidra.app.util.bin.format.dwarf4.encoding.DWARFInline\nghidra.app.util.bin.format.dwarf4.encoding.DWARFSourceLanguage\nghidra.app.util.bin.format.dwarf4.encoding.DWARFTag\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpression\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpressionEvaluator\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpressionException\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpressionOpCodes\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpressionOperandType\nghidra.app.util.bin.format.dwarf4.expression.DWARFExpressionResult\nghidra.app.util.bin.format.dwarf4.external.BuildIdSearchLocation\nghidra.app.util.bin.format.dwarf4.external.DWARFExternalDebugFilesPlugin\nghidra.app.util.bin.format.dwarf4.external.ExternalDebugFilesService\nghidra.app.util.bin.format.dwarf4.external.ExternalDebugInfo\nghidra.app.util.bin.format.dwarf4.external.LocalDirectorySearchLocation\nghidra.app.util.bin.format.dwarf4.external.SameDirSearchLocation\nghidra.app.util.bin.format.dwarf4.external.SearchLocation\nghidra.app.util.bin.format.dwarf4.external.SearchLocationCreatorContext\nghidra.app.util.bin.format.dwarf4.external.SearchLocationRegistry\nghidra.app.util.bin.format.dwarf4.external.SearchLocationRegistry.SearchLocationCreator\nghidra.app.util.bin.format.dwarf4.LEB128\nghidra.app.util.bin.format.dwarf4.next.DataTypeGraphComparator\nghidra.app.util.bin.format.dwarf4.next.DataTypeGraphComparator.DataTypePairObserver\nghidra.app.util.bin.format.dwarf4.next.DIEAMonitoredIterator\nghidra.app.util.bin.format.dwarf4.next.DWARFDataTypeImporter\nghidra.app.util.bin.format.dwarf4.next.DWARFDataTypeManager\nghidra.app.util.bin.format.dwarf4.next.DWARFFunctionImporter\nghidra.app.util.bin.format.dwarf4.next.DWARFImportOptions\nghidra.app.util.bin.format.dwarf4.next.DWARFImportSummary\nghidra.app.util.bin.format.dwarf4.next.DWARFNameInfo\nghidra.app.util.bin.format.dwarf4.next.DWARFParser\nghidra.app.util.bin.format.dwarf4.next.DWARFProgram\nghidra.app.util.bin.format.dwarf4.next.DWARFRegisterMappings\nghidra.app.util.bin.format.dwarf4.next.DWARFRegisterMappingsManager\nghidra.app.util.bin.format.dwarf4.next.DWARFSourceInfo\nghidra.app.util.bin.format.dwarf4.next.NamespacePath\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.BaseSectionProvider\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.CompressedSectionProvider\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.DSymSectionProvider\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.DWARFSectionNames\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.DWARFSectionProvider\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.DWARFSectionProviderFactory\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.ExternalDebugFileSectionProvider\nghidra.app.util.bin.format.dwarf4.next.sectionprovider.NullSectionProvider\nghidra.app.util.bin.format.dwarf4.next.StringTable\nghidra.app.util.bin.format.elf.AndroidElfRelocationTableDataType\nghidra.app.util.bin.format.elf.ElfConstants\nghidra.app.util.bin.format.elf.ElfDefaultGotPltMarkup\nghidra.app.util.bin.format.elf.ElfDynamic\nghidra.app.util.bin.format.elf.ElfDynamicTable\nghidra.app.util.bin.format.elf.ElfDynamicType\nghidra.app.util.bin.format.elf.ElfDynamicType.ElfDynamicValueType\nghidra.app.util.bin.format.elf.ElfException\nghidra.app.util.bin.format.elf.ElfFileSection\nghidra.app.util.bin.format.elf.ElfHeader\nghidra.app.util.bin.format.elf.ElfLoadHelper\nghidra.app.util.bin.format.elf.ElfProgramHeader\nghidra.app.util.bin.format.elf.ElfProgramHeaderConstants\nghidra.app.util.bin.format.elf.ElfProgramHeaderType\nghidra.app.util.bin.format.elf.ElfRelocation\nghidra.app.util.bin.format.elf.ElfRelocationTable\nghidra.app.util.bin.format.elf.ElfRelocationTable.TableFormat\nghidra.app.util.bin.format.elf.ElfSectionHeader\nghidra.app.util.bin.format.elf.ElfSectionHeaderConstants\nghidra.app.util.bin.format.elf.ElfSectionHeaderType\nghidra.app.util.bin.format.elf.ElfString\nghidra.app.util.bin.format.elf.ElfStringTable\nghidra.app.util.bin.format.elf.ElfSymbol\nghidra.app.util.bin.format.elf.ElfSymbolTable\nghidra.app.util.bin.format.elf.extend.ElfExtension\nghidra.app.util.bin.format.elf.extend.ElfExtensionFactory\nghidra.app.util.bin.format.elf.extend.ElfLoadAdapter\nghidra.app.util.bin.format.elf.GnuBuildIdSection\nghidra.app.util.bin.format.elf.GnuBuildIdSection.GnuBuildIdValues\nghidra.app.util.bin.format.elf.GnuConstants\nghidra.app.util.bin.format.elf.GnuDebugLinkSection\nghidra.app.util.bin.format.elf.GnuDebugLinkSection.GnuDebugLinkSectionValues\nghidra.app.util.bin.format.elf.GnuVerdaux\nghidra.app.util.bin.format.elf.GnuVerdef\nghidra.app.util.bin.format.elf.GnuVernaux\nghidra.app.util.bin.format.elf.GnuVerneed\nghidra.app.util.bin.format.elf.relocation.ElfRelocationContext\nghidra.app.util.bin.format.elf.relocation.ElfRelocationHandler\nghidra.app.util.bin.format.elf.relocation.ElfRelocationHandlerFactory\nghidra.app.util.bin.format.FactoryBundledWithBinaryReader\nghidra.app.util.bin.format.lx.LinearExecutable\nghidra.app.util.bin.format.macho.commands.BuildVersionCommand\nghidra.app.util.bin.format.macho.commands.BuildVersionCommand.BuildToolVersion\nghidra.app.util.bin.format.macho.commands.dyld.AbstractClassicProcessor\nghidra.app.util.bin.format.macho.commands.dyld.AbstractDyldInfoProcessor\nghidra.app.util.bin.format.macho.commands.dyld.AbstractDyldInfoState\nghidra.app.util.bin.format.macho.commands.dyld.BindProcessor\nghidra.app.util.bin.format.macho.commands.dyld.BindState\nghidra.app.util.bin.format.macho.commands.dyld.ClassicBindProcessor\nghidra.app.util.bin.format.macho.commands.dyld.ClassicLazyBindProcessor\nghidra.app.util.bin.format.macho.commands.dyld.LazyBindProcessor\nghidra.app.util.bin.format.macho.commands.dyld.LazyBindState\nghidra.app.util.bin.format.macho.commands.DyldChainedFixupHeader\nghidra.app.util.bin.format.macho.commands.DyldChainedFixupsCommand\nghidra.app.util.bin.format.macho.commands.DyldChainedImport\nghidra.app.util.bin.format.macho.commands.DyldChainedImports\nghidra.app.util.bin.format.macho.commands.DyldChainedStartsInImage\nghidra.app.util.bin.format.macho.commands.DyldChainedStartsInSegment\nghidra.app.util.bin.format.macho.commands.DyldInfoCommand\nghidra.app.util.bin.format.macho.commands.DyldInfoCommandConstants\nghidra.app.util.bin.format.macho.commands.DynamicLibrary\nghidra.app.util.bin.format.macho.commands.DynamicLibraryCommand\nghidra.app.util.bin.format.macho.commands.DynamicLibraryModule\nghidra.app.util.bin.format.macho.commands.DynamicLibraryReference\nghidra.app.util.bin.format.macho.commands.DynamicLinkerCommand\nghidra.app.util.bin.format.macho.commands.DynamicSymbolTableCommand\nghidra.app.util.bin.format.macho.commands.DynamicSymbolTableConstants\nghidra.app.util.bin.format.macho.commands.EncryptedInformationCommand\nghidra.app.util.bin.format.macho.commands.EntryPointCommand\nghidra.app.util.bin.format.macho.commands.FileSetEntryCommand\nghidra.app.util.bin.format.macho.commands.FixedVirtualMemoryFileCommand\nghidra.app.util.bin.format.macho.commands.FixedVirtualMemorySharedLibraryCommand\nghidra.app.util.bin.format.macho.commands.IdentCommand\nghidra.app.util.bin.format.macho.commands.LinkEditDataCommand\nghidra.app.util.bin.format.macho.commands.LinkerOptionCommand\nghidra.app.util.bin.format.macho.commands.LoadCommand\nghidra.app.util.bin.format.macho.commands.LoadCommandString\nghidra.app.util.bin.format.macho.commands.LoadCommandTypes\nghidra.app.util.bin.format.macho.commands.NList\nghidra.app.util.bin.format.macho.commands.NListConstants\nghidra.app.util.bin.format.macho.commands.ObsoleteCommand\nghidra.app.util.bin.format.macho.commands.PrebindChecksumCommand\nghidra.app.util.bin.format.macho.commands.PreboundDynamicLibraryCommand\nghidra.app.util.bin.format.macho.commands.RoutinesCommand\nghidra.app.util.bin.format.macho.commands.RunPathCommand\nghidra.app.util.bin.format.macho.commands.SegmentCommand\nghidra.app.util.bin.format.macho.commands.SegmentConstants\nghidra.app.util.bin.format.macho.commands.SegmentNames\nghidra.app.util.bin.format.macho.commands.SourceVersionCommand\nghidra.app.util.bin.format.macho.commands.SubClientCommand\nghidra.app.util.bin.format.macho.commands.SubFrameworkCommand\nghidra.app.util.bin.format.macho.commands.SubLibraryCommand\nghidra.app.util.bin.format.macho.commands.SubUmbrellaCommand\nghidra.app.util.bin.format.macho.commands.SymbolCommand\nghidra.app.util.bin.format.macho.commands.SymbolTableCommand\nghidra.app.util.bin.format.macho.commands.TableOfContents\nghidra.app.util.bin.format.macho.commands.TwoLevelHint\nghidra.app.util.bin.format.macho.commands.TwoLevelHintsCommand\nghidra.app.util.bin.format.macho.commands.UnsupportedLoadCommand\nghidra.app.util.bin.format.macho.commands.Util\nghidra.app.util.bin.format.macho.commands.UuidCommand\nghidra.app.util.bin.format.macho.commands.VersionMinCommand\nghidra.app.util.bin.format.macho.CpuSubTypes\nghidra.app.util.bin.format.macho.CpuTypes\nghidra.app.util.bin.format.macho.dyld.DyldArchitecture\nghidra.app.util.bin.format.macho.dyld.DyldCacheAccelerateInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheAcceleratorDof\nghidra.app.util.bin.format.macho.dyld.DyldCacheAcceleratorInitializer\nghidra.app.util.bin.format.macho.dyld.DyldCacheHeader\nghidra.app.util.bin.format.macho.dyld.DyldCacheImage\nghidra.app.util.bin.format.macho.dyld.DyldCacheImageInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheImageInfoExtra\nghidra.app.util.bin.format.macho.dyld.DyldCacheImageTextInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheLocalSymbolsEntry\nghidra.app.util.bin.format.macho.dyld.DyldCacheLocalSymbolsInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheMappingAndSlideInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheMappingInfo\nghidra.app.util.bin.format.macho.dyld.DyldCacheRangeEntry\nghidra.app.util.bin.format.macho.dyld.DyldCacheSlideInfo1\nghidra.app.util.bin.format.macho.dyld.DyldCacheSlideInfo2\nghidra.app.util.bin.format.macho.dyld.DyldCacheSlideInfo3\nghidra.app.util.bin.format.macho.dyld.DyldCacheSlideInfo4\nghidra.app.util.bin.format.macho.dyld.DyldCacheSlideInfoCommon\nghidra.app.util.bin.format.macho.dyld.DyldChainedPtr\nghidra.app.util.bin.format.macho.dyld.DyldChainedPtr.DyldChainType\nghidra.app.util.bin.format.macho.MachConstants\nghidra.app.util.bin.format.macho.MachException\nghidra.app.util.bin.format.macho.MachHeader\nghidra.app.util.bin.format.macho.MachHeaderFileTypes\nghidra.app.util.bin.format.macho.MachHeaderFlags\nghidra.app.util.bin.format.macho.ObsoleteException\nghidra.app.util.bin.format.macho.prelink.NoPreLinkSectionException\nghidra.app.util.bin.format.macho.prelink.PrelinkConstants\nghidra.app.util.bin.format.macho.prelink.PrelinkMap\nghidra.app.util.bin.format.macho.prelink.PrelinkParser\nghidra.app.util.bin.format.macho.relocation.MachoRelocation\nghidra.app.util.bin.format.macho.relocation.MachoRelocationHandler\nghidra.app.util.bin.format.macho.relocation.MachoRelocationHandlerFactory\nghidra.app.util.bin.format.macho.RelocationInfo\nghidra.app.util.bin.format.macho.Section\nghidra.app.util.bin.format.macho.SectionAttributes\nghidra.app.util.bin.format.macho.SectionNames\nghidra.app.util.bin.format.macho.SectionTypes\nghidra.app.util.bin.format.macho.threadcommand.DebugStateX86_32\nghidra.app.util.bin.format.macho.threadcommand.DebugStateX86_64\nghidra.app.util.bin.format.macho.threadcommand.ExceptionStateX86_32\nghidra.app.util.bin.format.macho.threadcommand.ExceptionStateX86_64\nghidra.app.util.bin.format.macho.threadcommand.FloatStateX86_32\nghidra.app.util.bin.format.macho.threadcommand.ThreadCommand\nghidra.app.util.bin.format.macho.threadcommand.ThreadState\nghidra.app.util.bin.format.macho.threadcommand.ThreadStateARM\nghidra.app.util.bin.format.macho.threadcommand.ThreadStateARM_64\nghidra.app.util.bin.format.macho.threadcommand.ThreadStateHeader\nghidra.app.util.bin.format.macho.threadcommand.ThreadStatePPC\nghidra.app.util.bin.format.macho.threadcommand.ThreadStateX86_32\nghidra.app.util.bin.format.macho.threadcommand.ThreadStateX86_64\nghidra.app.util.bin.format.macos.asd.AppleSingleDouble\nghidra.app.util.bin.format.macos.asd.Entry\nghidra.app.util.bin.format.macos.asd.EntryDescriptor\nghidra.app.util.bin.format.macos.asd.EntryDescriptorID\nghidra.app.util.bin.format.macos.asd.EntryFactory\nghidra.app.util.bin.format.macos.cfm.CFM_Util\nghidra.app.util.bin.format.macos.cfm.CFragArchitecture\nghidra.app.util.bin.format.macos.cfm.CFragLocatorKind\nghidra.app.util.bin.format.macos.cfm.CFragResource\nghidra.app.util.bin.format.macos.cfm.CFragResourceMember\nghidra.app.util.bin.format.macos.cfm.CFragSymbolClass\nghidra.app.util.bin.format.macos.cfm.CFragUpdateLevel\nghidra.app.util.bin.format.macos.cfm.CFragUsage\nghidra.app.util.bin.format.macos.cfm.CFragUsage1Union\nghidra.app.util.bin.format.macos.cfm.CFragUsage2Union\nghidra.app.util.bin.format.macos.cfm.CFragWhere1Union\nghidra.app.util.bin.format.macos.cfm.CFragWhere2Union\nghidra.app.util.bin.format.macos.cfm.CodeFragmentManager\nghidra.app.util.bin.format.macos.MacException\nghidra.app.util.bin.format.macos.rm.ReferenceListEntry\nghidra.app.util.bin.format.macos.rm.ResourceHeader\nghidra.app.util.bin.format.macos.rm.ResourceMap\nghidra.app.util.bin.format.macos.rm.ResourceType\nghidra.app.util.bin.format.macos.rm.ResourceTypeFactory\nghidra.app.util.bin.format.macos.rm.ResourceTypes\nghidra.app.util.bin.format.macos.rm.SingleResourceData\nghidra.app.util.bin.format.MemoryLoadable\nghidra.app.util.bin.format.mz.DOSHeader\nghidra.app.util.bin.format.mz.OldStyleExecutable\nghidra.app.util.bin.format.ne.EntryPoint\nghidra.app.util.bin.format.ne.EntryTable\nghidra.app.util.bin.format.ne.EntryTableBundle\nghidra.app.util.bin.format.ne.ImportedNameTable\nghidra.app.util.bin.format.ne.InformationBlock\nghidra.app.util.bin.format.ne.InvalidWindowsHeaderException\nghidra.app.util.bin.format.ne.LengthStringOrdinalSet\nghidra.app.util.bin.format.ne.LengthStringSet\nghidra.app.util.bin.format.ne.ModuleReferenceTable\nghidra.app.util.bin.format.ne.NewExecutable\nghidra.app.util.bin.format.ne.NonResidentNameTable\nghidra.app.util.bin.format.ne.ResidentNameTable\nghidra.app.util.bin.format.ne.Resource\nghidra.app.util.bin.format.ne.ResourceName\nghidra.app.util.bin.format.ne.ResourceStringTable\nghidra.app.util.bin.format.ne.ResourceTable\nghidra.app.util.bin.format.ne.ResourceType\nghidra.app.util.bin.format.ne.Segment\nghidra.app.util.bin.format.ne.SegmentRelocation\nghidra.app.util.bin.format.ne.SegmentTable\nghidra.app.util.bin.format.ne.WindowsHeader\nghidra.app.util.bin.format.objc2.ObjectiveC2_Cache\nghidra.app.util.bin.format.objc2.ObjectiveC2_Category\nghidra.app.util.bin.format.objc2.ObjectiveC2_Class\nghidra.app.util.bin.format.objc2.ObjectiveC2_ClassRW\nghidra.app.util.bin.format.objc2.ObjectiveC2_Constants\nghidra.app.util.bin.format.objc2.ObjectiveC2_ImageInfo\nghidra.app.util.bin.format.objc2.ObjectiveC2_Implementation\nghidra.app.util.bin.format.objc2.ObjectiveC2_InstanceVariable\nghidra.app.util.bin.format.objc2.ObjectiveC2_InstanceVariableList\nghidra.app.util.bin.format.objc2.ObjectiveC2_MessageReference\nghidra.app.util.bin.format.objc2.ObjectiveC2_Method\nghidra.app.util.bin.format.objc2.ObjectiveC2_MethodList\nghidra.app.util.bin.format.objc2.ObjectiveC2_Property\nghidra.app.util.bin.format.objc2.ObjectiveC2_PropertyList\nghidra.app.util.bin.format.objc2.ObjectiveC2_Protocol\nghidra.app.util.bin.format.objc2.ObjectiveC2_ProtocolList\nghidra.app.util.bin.format.objc2.ObjectiveC2_State\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Category\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Class\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Constants\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_InstanceVariable\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_InstanceVariableList\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_MetaClass\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Method\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_MethodList\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Module\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Protocol\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_ProtocolList\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_ProtocolMethod\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_ProtocolMethodList\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_State\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_SymbolTable\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_TypeEncodings\nghidra.app.util.bin.format.objectiveC.ObjectiveC1_Utilities\nghidra.app.util.bin.format.objectiveC.ObjectiveC_Method\nghidra.app.util.bin.format.objectiveC.ObjectiveC_MethodList\nghidra.app.util.bin.format.objectiveC.ObjectiveC_MethodType\nghidra.app.util.bin.format.omf.OmfComdefRecord\nghidra.app.util.bin.format.omf.OmfCommentRecord\nghidra.app.util.bin.format.omf.OmfData\nghidra.app.util.bin.format.omf.OmfEnumeratedData\nghidra.app.util.bin.format.omf.OmfException\nghidra.app.util.bin.format.omf.OmfExternalSymbol\nghidra.app.util.bin.format.omf.OmfFileHeader\nghidra.app.util.bin.format.omf.OmfFixupRecord\nghidra.app.util.bin.format.omf.OmfFixupRecord.FixupState\nghidra.app.util.bin.format.omf.OmfFixupRecord.FixupSubrecord\nghidra.app.util.bin.format.omf.OmfFixupRecord.FixupTarget\nghidra.app.util.bin.format.omf.OmfFixupRecord.Subrecord\nghidra.app.util.bin.format.omf.OmfFixupRecord.ThreadSubrecord\nghidra.app.util.bin.format.omf.OmfGroupRecord\nghidra.app.util.bin.format.omf.OmfGroupRecord.GroupSubrecord\nghidra.app.util.bin.format.omf.OmfIteratedData\nghidra.app.util.bin.format.omf.OmfIteratedData.DataBlock\nghidra.app.util.bin.format.omf.OmfLibraryRecord\nghidra.app.util.bin.format.omf.OmfLibraryRecord.MemberHeader\nghidra.app.util.bin.format.omf.OmfLineNumberRecord\nghidra.app.util.bin.format.omf.OmfLineNumberRecord.LineSubrecord\nghidra.app.util.bin.format.omf.OmfModuleEnd\nghidra.app.util.bin.format.omf.OmfNamesRecord\nghidra.app.util.bin.format.omf.OmfRecord\nghidra.app.util.bin.format.omf.OmfSegmentHeader\nghidra.app.util.bin.format.omf.OmfSegmentHeader.SectionStream\nghidra.app.util.bin.format.omf.OmfSymbol\nghidra.app.util.bin.format.omf.OmfSymbolRecord\nghidra.app.util.bin.format.pdb.PdbInfo\nghidra.app.util.bin.format.pdb.PdbInfoCodeView\nghidra.app.util.bin.format.pdb.PdbInfoDotNet\nghidra.app.util.bin.format.pdb.PdbParserConstants\nghidra.app.util.bin.format.pe.ArchitectureDataDirectory\nghidra.app.util.bin.format.pe.BaseRelocation\nghidra.app.util.bin.format.pe.BaseRelocationDataDirectory\nghidra.app.util.bin.format.pe.BoundImportDataDirectory\nghidra.app.util.bin.format.pe.BoundImportDescriptor\nghidra.app.util.bin.format.pe.BoundImportForwarderRef\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliArrayShape\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliByRef\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliConstraint\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliCustomMod\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliElementType\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliParam\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliRetType\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliSigType\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeArray\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeBase\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeClass\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeCodeDataType\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeFnPtr\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeGenericInst\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypePrimitive\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypePtr\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeSzArray\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeValueType\nghidra.app.util.bin.format.pe.cli.blobs.CliAbstractSig.CliTypeVarOrMvar\nghidra.app.util.bin.format.pe.cli.blobs.CliBlob\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobCustomAttrib\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobMarshalSpec\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobMarshalSpec.CliNativeType\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobMarshalSpec.CliNativeTypeDataType\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobMarshalSpec.CliSafeArrayElemType\nghidra.app.util.bin.format.pe.cli.blobs.CliBlobMarshalSpec.CliSafeArrayElemTypeDataType\nghidra.app.util.bin.format.pe.cli.blobs.CliSigAssembly\nghidra.app.util.bin.format.pe.cli.blobs.CliSigAssemblyRef\nghidra.app.util.bin.format.pe.cli.blobs.CliSigConstant\nghidra.app.util.bin.format.pe.cli.blobs.CliSigField\nghidra.app.util.bin.format.pe.cli.blobs.CliSigLocalVar\nghidra.app.util.bin.format.pe.cli.blobs.CliSigMethodDef\nghidra.app.util.bin.format.pe.cli.blobs.CliSigMethodRef\nghidra.app.util.bin.format.pe.cli.blobs.CliSigMethodSpec\nghidra.app.util.bin.format.pe.cli.blobs.CliSigProperty\nghidra.app.util.bin.format.pe.cli.blobs.CliSigStandAloneMethod\nghidra.app.util.bin.format.pe.cli.blobs.CliSigStandAloneMethod.CallingConvention\nghidra.app.util.bin.format.pe.cli.blobs.CliSigTypeSpec\nghidra.app.util.bin.format.pe.cli.CliMetadataDirectory\nghidra.app.util.bin.format.pe.cli.CliMetadataRoot\nghidra.app.util.bin.format.pe.cli.CliRepresentable\nghidra.app.util.bin.format.pe.cli.CliStreamHeader\nghidra.app.util.bin.format.pe.cli.methods.CliMethodDef\nghidra.app.util.bin.format.pe.cli.methods.CliMethodDef.HeaderFormat\nghidra.app.util.bin.format.pe.cli.methods.CliMethodExtraSections\nghidra.app.util.bin.format.pe.cli.streams.CliAbstractStream\nghidra.app.util.bin.format.pe.cli.streams.CliStreamBlob\nghidra.app.util.bin.format.pe.cli.streams.CliStreamGuid\nghidra.app.util.bin.format.pe.cli.streams.CliStreamMetadata\nghidra.app.util.bin.format.pe.cli.streams.CliStreamStrings\nghidra.app.util.bin.format.pe.cli.streams.CliStreamUserStrings\nghidra.app.util.bin.format.pe.cli.tables.CliAbstractTable\nghidra.app.util.bin.format.pe.cli.tables.CliAbstractTableRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssembly\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssembly.CliAssemblyRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyOS\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyOS.CliAssemblyOSRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyProcessor\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyProcessor.CliAssemblyProcessorRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRef\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRef.CliAssemblyRefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRefOS\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRefOS.CliAssemblyRefOSRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRefProcessor\nghidra.app.util.bin.format.pe.cli.tables.CliTableAssemblyRefProcessor.CliAssemblyRefProcessorRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableClassLayout\nghidra.app.util.bin.format.pe.cli.tables.CliTableClassLayout.CliClassLayoutRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableConstant\nghidra.app.util.bin.format.pe.cli.tables.CliTableConstant.CliConstantRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableCustomAttribute\nghidra.app.util.bin.format.pe.cli.tables.CliTableCustomAttribute.CliCustomAttributeRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableDeclSecurity\nghidra.app.util.bin.format.pe.cli.tables.CliTableDeclSecurity.CliDeclSecurityRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableEvent\nghidra.app.util.bin.format.pe.cli.tables.CliTableEvent.CliEventRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableEventMap\nghidra.app.util.bin.format.pe.cli.tables.CliTableEventMap.CliEventMapRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableExportedType\nghidra.app.util.bin.format.pe.cli.tables.CliTableExportedType.CliExportedTypeRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableField\nghidra.app.util.bin.format.pe.cli.tables.CliTableField.CliFieldRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldLayout\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldLayout.CliFieldLayoutRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldMarshall\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldMarshall.CliFieldMarshallRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldRVA\nghidra.app.util.bin.format.pe.cli.tables.CliTableFieldRVA.CliFieldRVARow\nghidra.app.util.bin.format.pe.cli.tables.CliTableFile\nghidra.app.util.bin.format.pe.cli.tables.CliTableFile.CliFileRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableGenericParam\nghidra.app.util.bin.format.pe.cli.tables.CliTableGenericParam.CliGenericParamRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableGenericParamConstraint\nghidra.app.util.bin.format.pe.cli.tables.CliTableGenericParamConstraint.CliGenericParamConstraintRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableImplMap\nghidra.app.util.bin.format.pe.cli.tables.CliTableImplMap.CliImplMapRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableInterfaceImpl\nghidra.app.util.bin.format.pe.cli.tables.CliTableInterfaceImpl.CliInterfaceImplRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableManifestResource\nghidra.app.util.bin.format.pe.cli.tables.CliTableManifestResource.CliManifestResourceRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableMemberRef\nghidra.app.util.bin.format.pe.cli.tables.CliTableMemberRef.CliMemberRefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodDef\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodDef.CliMethodDefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodImpl\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodImpl.CliMethodImplRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodSemantics\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodSemantics.CliMethodSemanticsRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodSpec\nghidra.app.util.bin.format.pe.cli.tables.CliTableMethodSpec.CliMethodSpecRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableModule\nghidra.app.util.bin.format.pe.cli.tables.CliTableModule.CliModuleRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableModuleRef\nghidra.app.util.bin.format.pe.cli.tables.CliTableModuleRef.CliModuleRefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableNestedClass\nghidra.app.util.bin.format.pe.cli.tables.CliTableNestedClass.CliNestedClassRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableParam\nghidra.app.util.bin.format.pe.cli.tables.CliTableParam.CliParamRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableProperty\nghidra.app.util.bin.format.pe.cli.tables.CliTablePropertyMap\nghidra.app.util.bin.format.pe.cli.tables.CliTablePropertyMap.CliPropertyMapRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableStandAloneSig\nghidra.app.util.bin.format.pe.cli.tables.CliTableStandAloneSig.CliStandAloneSigRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeDef\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeDef.CliTypeDefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeRef\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeRef.CliTypeRefRow\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeSpec\nghidra.app.util.bin.format.pe.cli.tables.CliTableTypeSpec.CliTypeSpecRow\nghidra.app.util.bin.format.pe.cli.tables.CliTypeTable\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumAssemblyFlags\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumAssemblyHashAlgorithm\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumEventAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumFieldAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumFileAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumGenericParamAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumManifestResourceAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumMethodAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumMethodImplAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumMethodSemanticsAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumParamAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumPInvokeAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumPropertyAttributes\nghidra.app.util.bin.format.pe.cli.tables.flags.CliFlags.CliEnumTypeAttributes\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliCodedIndexUtils\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexCustomAttributeType\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexHasConstant\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexHasCustomAttribute\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexHasDeclSecurity\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexHasFieldMarshall\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexHasSemantics\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexImplementation\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexMemberForwarded\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexMemberRefParent\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexMethodDefOrRef\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexResolutionScope\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexTypeDefOrRef\nghidra.app.util.bin.format.pe.cli.tables.indexes.CliIndexTypeOrMethodDef\nghidra.app.util.bin.format.pe.COMDescriptorDataDirectory\nghidra.app.util.bin.format.pe.Constants\nghidra.app.util.bin.format.pe.ControlFlowGuard\nghidra.app.util.bin.format.pe.DataDirectory\nghidra.app.util.bin.format.pe.debug.DebugCodeView\nghidra.app.util.bin.format.pe.debug.DebugCodeViewConstants\nghidra.app.util.bin.format.pe.debug.DebugCodeViewSymbolTable\nghidra.app.util.bin.format.pe.debug.DebugCOFFLineNumber\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbol\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolAux\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolAux.AuxFile\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolAux.AuxSection\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolAux.AuxSym\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolsHeader\nghidra.app.util.bin.format.pe.debug.DebugCOFFSymbolTable\nghidra.app.util.bin.format.pe.debug.DebugDirectory\nghidra.app.util.bin.format.pe.debug.DebugDirectoryParser\nghidra.app.util.bin.format.pe.debug.DebugFixup\nghidra.app.util.bin.format.pe.debug.DebugFixupElement\nghidra.app.util.bin.format.pe.debug.DebugMisc\nghidra.app.util.bin.format.pe.debug.DebugSymbol\nghidra.app.util.bin.format.pe.debug.DebugSymbolSelector\nghidra.app.util.bin.format.pe.debug.OMFAlignSym\nghidra.app.util.bin.format.pe.debug.OMFFileIndex\nghidra.app.util.bin.format.pe.debug.OMFGlobal\nghidra.app.util.bin.format.pe.debug.OMFLibrary\nghidra.app.util.bin.format.pe.debug.OMFModule\nghidra.app.util.bin.format.pe.debug.OMFSegDesc\nghidra.app.util.bin.format.pe.debug.OMFSegMap\nghidra.app.util.bin.format.pe.debug.OMFSegMapDesc\nghidra.app.util.bin.format.pe.debug.OMFSrcModule\nghidra.app.util.bin.format.pe.debug.OMFSrcModuleFile\nghidra.app.util.bin.format.pe.debug.OMFSrcModuleLine\nghidra.app.util.bin.format.pe.debug.PrimitiveTypeListing\nghidra.app.util.bin.format.pe.debug.S_BPREL32_NEW\nghidra.app.util.bin.format.pe.debug.S_GPROC32_NEW\nghidra.app.util.bin.format.pe.DebugDataDirectory\nghidra.app.util.bin.format.pe.DefaultDataDirectory\nghidra.app.util.bin.format.pe.DelayImportDataDirectory\nghidra.app.util.bin.format.pe.DelayImportDescriptor\nghidra.app.util.bin.format.pe.DllCharacteristics\nghidra.app.util.bin.format.pe.ExceptionDataDirectory\nghidra.app.util.bin.format.pe.ExportDataDirectory\nghidra.app.util.bin.format.pe.ExportInfo\nghidra.app.util.bin.format.pe.FileHeader\nghidra.app.util.bin.format.pe.GlobalPointerDataDirectory\nghidra.app.util.bin.format.pe.ImageCor20Header\nghidra.app.util.bin.format.pe.ImageCor20Header.ImageCor20Flags\nghidra.app.util.bin.format.pe.ImageRuntimeFunctionEntries\nghidra.app.util.bin.format.pe.ImageRuntimeFunctionEntries._IMAGE_RUNTIME_FUNCTION_ENTRY\nghidra.app.util.bin.format.pe.ImportAddressTableDataDirectory\nghidra.app.util.bin.format.pe.ImportByName\nghidra.app.util.bin.format.pe.ImportDataDirectory\nghidra.app.util.bin.format.pe.ImportDescriptor\nghidra.app.util.bin.format.pe.ImportInfo\nghidra.app.util.bin.format.pe.InvalidNTHeaderException\nghidra.app.util.bin.format.pe.LoadConfigDataDirectory\nghidra.app.util.bin.format.pe.LoadConfigDirectory\nghidra.app.util.bin.format.pe.MachineConstants\nghidra.app.util.bin.format.pe.NTHeader\nghidra.app.util.bin.format.pe.OffsetValidator\nghidra.app.util.bin.format.pe.OptionalHeader\nghidra.app.util.bin.format.pe.OptionalHeaderImpl\nghidra.app.util.bin.format.pe.OptionalHeaderROM\nghidra.app.util.bin.format.pe.PeMarkupable\nghidra.app.util.bin.format.pe.PeSubsystem\nghidra.app.util.bin.format.pe.PeUtils\nghidra.app.util.bin.format.pe.PEx64UnwindInfoDataType\nghidra.app.util.bin.format.pe.PortableExecutable\nghidra.app.util.bin.format.pe.PortableExecutable.SectionLayout\nghidra.app.util.bin.format.pe.resource.ResourceDataEntry\nghidra.app.util.bin.format.pe.resource.ResourceDirectory\nghidra.app.util.bin.format.pe.resource.ResourceDirectoryEntry\nghidra.app.util.bin.format.pe.resource.ResourceDirectoryString\nghidra.app.util.bin.format.pe.resource.ResourceDirectoryStringU\nghidra.app.util.bin.format.pe.resource.ResourceInfo\nghidra.app.util.bin.format.pe.resource.ResourceStringInfo\nghidra.app.util.bin.format.pe.resource.VS_VERSION_CHILD\nghidra.app.util.bin.format.pe.resource.VS_VERSION_INFO\nghidra.app.util.bin.format.pe.ResourceDataDirectory\nghidra.app.util.bin.format.pe.rich.CompId\nghidra.app.util.bin.format.pe.rich.MSProductType\nghidra.app.util.bin.format.pe.rich.PERichTableDataType\nghidra.app.util.bin.format.pe.rich.RichHeaderRecord\nghidra.app.util.bin.format.pe.rich.RichHeaderUtils\nghidra.app.util.bin.format.pe.rich.RichProduct\nghidra.app.util.bin.format.pe.RichHeader\nghidra.app.util.bin.format.pe.RichTable\nghidra.app.util.bin.format.pe.SectionFlags\nghidra.app.util.bin.format.pe.SectionHeader\nghidra.app.util.bin.format.pe.SecurityCertificate\nghidra.app.util.bin.format.pe.SecurityDataDirectory\nghidra.app.util.bin.format.pe.SeparateDebugHeader\nghidra.app.util.bin.format.pe.ThunkData\nghidra.app.util.bin.format.pe.TLSDataDirectory\nghidra.app.util.bin.format.pe.TLSDirectory\nghidra.app.util.bin.format.pef.ContainerHeader\nghidra.app.util.bin.format.pef.ExportedSymbol\nghidra.app.util.bin.format.pef.ExportedSymbolHashSlot\nghidra.app.util.bin.format.pef.ExportedSymbolKey\nghidra.app.util.bin.format.pef.ImportedLibrary\nghidra.app.util.bin.format.pef.ImportedSymbol\nghidra.app.util.bin.format.pef.ImportStateCache\nghidra.app.util.bin.format.pef.LoaderInfoHeader\nghidra.app.util.bin.format.pef.LoaderRelocationHeader\nghidra.app.util.bin.format.pef.PackedDataOpcodes\nghidra.app.util.bin.format.pef.PefConstants\nghidra.app.util.bin.format.pef.PefDebug\nghidra.app.util.bin.format.pef.PefException\nghidra.app.util.bin.format.pef.Relocation\nghidra.app.util.bin.format.pef.RelocationFactory\nghidra.app.util.bin.format.pef.RelocationState\nghidra.app.util.bin.format.pef.RelocByIndexGroup\nghidra.app.util.bin.format.pef.RelocBySectDWithSkip\nghidra.app.util.bin.format.pef.RelocIncrPosition\nghidra.app.util.bin.format.pef.RelocLgByImport\nghidra.app.util.bin.format.pef.RelocLgRepeat\nghidra.app.util.bin.format.pef.RelocLgSetOrBySection\nghidra.app.util.bin.format.pef.RelocSetPosition\nghidra.app.util.bin.format.pef.RelocSmRepeat\nghidra.app.util.bin.format.pef.RelocUndefinedOpcode\nghidra.app.util.bin.format.pef.RelocValueGroup\nghidra.app.util.bin.format.pef.SectionHeader\nghidra.app.util.bin.format.pef.SectionKind\nghidra.app.util.bin.format.pef.SectionShareKind\nghidra.app.util.bin.format.pef.SymbolClass\nghidra.app.util.bin.format.ubi.FatArch\nghidra.app.util.bin.format.ubi.FatHeader\nghidra.app.util.bin.format.ubi.UbiException\nghidra.app.util.bin.format.Writeable\nghidra.app.util.bin.format.xcoff.XCoffArchiveConstants\nghidra.app.util.bin.format.xcoff.XCoffArchiveHeader\nghidra.app.util.bin.format.xcoff.XCoffArchiveMemberHeader\nghidra.app.util.bin.format.xcoff.XCoffException\nghidra.app.util.bin.format.xcoff.XCoffFileHeader\nghidra.app.util.bin.format.xcoff.XCoffFileHeaderFlags\nghidra.app.util.bin.format.xcoff.XCoffFileHeaderMagic\nghidra.app.util.bin.format.xcoff.XCoffOptionalHeader\nghidra.app.util.bin.format.xcoff.XCoffSectionHeader\nghidra.app.util.bin.format.xcoff.XCoffSectionHeaderFlags\nghidra.app.util.bin.format.xcoff.XCoffSectionHeaderNames\nghidra.app.util.bin.format.xcoff.XCoffSymbol\nghidra.app.util.bin.format.xcoff.XCoffSymbolStorageClass\nghidra.app.util.bin.format.xcoff.XCoffSymbolStorageClassCSECT\nghidra.app.util.bin.GhidraRandomAccessFile\nghidra.app.util.bin.InputStreamByteProvider\nghidra.app.util.bin.MemBufferByteProvider\nghidra.app.util.bin.MemoryByteProvider\nghidra.app.util.bin.MemoryMutableByteProvider\nghidra.app.util.bin.MutableByteProvider\nghidra.app.util.bin.ObfuscatedFileByteProvider\nghidra.app.util.bin.ObfuscatedInputStream\nghidra.app.util.bin.ObfuscatedOutputStream\nghidra.app.util.bin.RandomAccessByteProvider\nghidra.app.util.bin.RandomAccessMutableByteProvider\nghidra.app.util.bin.RangeMappedByteProvider\nghidra.app.util.bin.StructConverter\nghidra.app.util.bin.StructConverterUtil\nghidra.app.util.bin.SynchronizedByteProvider\nghidra.app.util.BlockPanel\nghidra.app.util.ByteCopier\nghidra.app.util.ByteCopier.ByteStringTransferable\nghidra.app.util.ByteCopier.ProgrammingByteStringTransferable\nghidra.app.util.ClipboardType\nghidra.app.util.CodeUnitInfo\nghidra.app.util.CodeUnitInfoTransferable\nghidra.app.util.ColorAndStyle\nghidra.app.util.CommentTypes\nghidra.app.util.cparser.C.CompositeHandler\nghidra.app.util.cparser.C.CParser\nghidra.app.util.cparser.C.CParserConstants\nghidra.app.util.cparser.C.CParserTokenManager\nghidra.app.util.cparser.C.CParserUtils\nghidra.app.util.cparser.C.Declaration\nghidra.app.util.cparser.C.ParseException\nghidra.app.util.cparser.C.SimpleCharStream\nghidra.app.util.cparser.C.Token\nghidra.app.util.cparser.C.TokenMgrError\nghidra.app.util.cparser.CPP.DefineTable\nghidra.app.util.cparser.CPP.JavaCharStream\nghidra.app.util.cparser.CPP.ParseException\nghidra.app.util.cparser.CPP.PreProcessor\nghidra.app.util.cparser.CPP.PreProcessorConstants\nghidra.app.util.cparser.CPP.PreProcessorTokenManager\nghidra.app.util.cparser.CPP.Token\nghidra.app.util.cparser.CPP.TokenMgrError\nghidra.app.util.datatype.ApplyEnumDialog\nghidra.app.util.datatype.DataTypeDropDownSelectionDataModel\nghidra.app.util.datatype.DataTypeSelectionDialog\nghidra.app.util.datatype.DataTypeSelectionEditor\nghidra.app.util.datatype.DataTypeUrl\nghidra.app.util.datatype.EmptyCompositeException\nghidra.app.util.datatype.microsoft.DataApplyOptions\nghidra.app.util.datatype.microsoft.DataValidationOptions\nghidra.app.util.datatype.microsoft.GroupIconResourceDataType\nghidra.app.util.datatype.microsoft.GUID\nghidra.app.util.datatype.microsoft.GuidDataType\nghidra.app.util.datatype.microsoft.GuidInfo\nghidra.app.util.datatype.microsoft.GuidUtil\nghidra.app.util.datatype.microsoft.GuidUtil.GuidType\nghidra.app.util.datatype.microsoft.HTMLResourceDataType\nghidra.app.util.datatype.microsoft.MSDataTypeUtils\nghidra.app.util.datatype.microsoft.MUIResourceDataType\nghidra.app.util.datatype.microsoft.NewGuid\nghidra.app.util.datatype.microsoft.RTTI1DataType\nghidra.app.util.datatype.microsoft.RTTI2DataType\nghidra.app.util.datatype.microsoft.RTTI3DataType\nghidra.app.util.datatype.microsoft.RTTI4DataType\nghidra.app.util.datatype.microsoft.RTTIDataType\nghidra.app.util.datatype.microsoft.RTTI0DataType\nghidra.app.util.datatype.microsoft.VersionedGuidInfo\nghidra.app.util.datatype.microsoft.WEVTResourceDataType\nghidra.app.util.datatype.NavigationDirection\nghidra.app.util.DataTypeDependencyOrderer\nghidra.app.util.DataTypeDependencyOrderer.Entry\nghidra.app.util.DataTypeNamingUtil\nghidra.app.util.DecompilerConcurrentQ\nghidra.app.util.demangler.AbstractDemangledFunctionDefinitionDataType\nghidra.app.util.demangler.CharacterIterator\nghidra.app.util.demangler.Demangled\nghidra.app.util.demangler.DemangledAddressTable\nghidra.app.util.demangler.DemangledDataType\nghidra.app.util.demangler.DemangledException\nghidra.app.util.demangler.DemangledFunction\nghidra.app.util.demangler.DemangledFunctionIndirect\nghidra.app.util.demangler.DemangledFunctionPointer\nghidra.app.util.demangler.DemangledFunctionReference\nghidra.app.util.demangler.DemangledLambda\nghidra.app.util.demangler.DemangledObject\nghidra.app.util.demangler.DemangledString\nghidra.app.util.demangler.DemangledTemplate\nghidra.app.util.demangler.DemangledThunk\nghidra.app.util.demangler.DemangledType\nghidra.app.util.demangler.DemangledUnknown\nghidra.app.util.demangler.DemangledVariable\nghidra.app.util.demangler.Demangler\nghidra.app.util.demangler.DemanglerOptions\nghidra.app.util.demangler.DemanglerUtil\nghidra.app.util.dialog.AskAddrDialog\nghidra.app.util.dialog.CheckoutDialog\nghidra.app.util.DisplayableEol\nghidra.app.util.DomainObjectService\nghidra.app.util.EditFieldNameDialog\nghidra.app.util.exporter.AbstractLoaderExporter\nghidra.app.util.exporter.AsciiExporter\nghidra.app.util.exporter.BinaryExporter\nghidra.app.util.exporter.CppExporter\nghidra.app.util.exporter.ElfExporter\nghidra.app.util.exporter.Exporter\nghidra.app.util.exporter.ExporterException\nghidra.app.util.exporter.GzfExporter\nghidra.app.util.exporter.HtmlExporter\nghidra.app.util.exporter.IntelHexExporter\nghidra.app.util.exporter.PeExporter\nghidra.app.util.exporter.ProjectArchiveExporter\nghidra.app.util.exporter.StringComparer\nghidra.app.util.exporter.XmlExporter\nghidra.app.util.FileOpenDataFlavorHandler\nghidra.app.util.FileOpenDropHandler\nghidra.app.util.GenericHelpTopics\nghidra.app.util.GhidraFileOpenDataFlavorHandlerService\nghidra.app.util.headless.AnalyzeHeadless\nghidra.app.util.headless.GhidraScriptRunner\nghidra.app.util.headless.HeadlessAnalyzer\nghidra.app.util.headless.HeadlessOptions\nghidra.app.util.headless.HeadlessScript\nghidra.app.util.headless.HeadlessScript.HeadlessContinuationOption\nghidra.app.util.headless.HeadlessTimedTaskMonitor\nghidra.app.util.HelpTopics\nghidra.app.util.HexLong\nghidra.app.util.HighlightProvider\nghidra.app.util.html.ArrayDataTypeHTMLRepresentation\nghidra.app.util.html.BitFieldDataTypeHTMLRepresentation\nghidra.app.util.html.CompletelyDifferentHTMLDataTypeRepresentationWrapper\nghidra.app.util.html.CompositeDataTypeHTMLRepresentation\nghidra.app.util.html.DataTypeLine\nghidra.app.util.html.DefaultDataTypeHTMLRepresentation\nghidra.app.util.html.diff.DataTypeDiff\nghidra.app.util.html.diff.DataTypeDiffBuilder\nghidra.app.util.html.diff.DataTypeDiffInput\nghidra.app.util.html.diff.DiffLines\nghidra.app.util.html.EmptyDataTypeLine\nghidra.app.util.html.EmptyTextLine\nghidra.app.util.html.EmptyVariableTextLine\nghidra.app.util.html.EnumDataTypeHTMLRepresentation\nghidra.app.util.html.FunctionDataTypeHTMLRepresentation\nghidra.app.util.html.HTMLDataTypeRepresentation\nghidra.app.util.html.HTMLDataTypeRepresentationDiffInput\nghidra.app.util.html.MissingArchiveDataTypeHTMLRepresentation\nghidra.app.util.html.NullDataTypeHTMLRepresentation\nghidra.app.util.html.PlaceHolderLine\nghidra.app.util.html.PointerDataTypeHTMLRepresentation\nghidra.app.util.html.TextLine\nghidra.app.util.html.TypeDefDataTypeHTMLRepresentation\nghidra.app.util.html.ValidatableLine\nghidra.app.util.html.VariableTextLine\nghidra.app.util.importer.AutoImporter\nghidra.app.util.importer.CsHintLoadSpecChooser\nghidra.app.util.importer.LcsHintLoadSpecChooser\nghidra.app.util.importer.LibrarySearchPathManager\nghidra.app.util.importer.LoaderArgsOptionChooser\nghidra.app.util.importer.LoadSpecChooser\nghidra.app.util.importer.MessageLog\nghidra.app.util.importer.MessageLogContinuesFactory\nghidra.app.util.importer.MessageLogExceptionHandler\nghidra.app.util.importer.MultipleProgramsException\nghidra.app.util.importer.MultipleProgramsStrategy\nghidra.app.util.importer.OptionChooser\nghidra.app.util.importer.SingleLoaderFilter\nghidra.app.util.MemoryBlockUtils\nghidra.app.util.NamespaceUtils\nghidra.app.util.navigation.GoToAddressLabelDialog\nghidra.app.util.navigation.GoToQuery\nghidra.app.util.navigation.GoToQuery.ProgramGroup\nghidra.app.util.navigation.GoToServiceImpl\nghidra.app.util.opinion.AbstractLibrarySupportLoader\nghidra.app.util.opinion.AbstractProgramLoader\nghidra.app.util.opinion.AddressSetPartitioner\nghidra.app.util.opinion.BinaryLoader\nghidra.app.util.opinion.BoundedBufferedReader\nghidra.app.util.opinion.CoffLoader\nghidra.app.util.opinion.DbgLoader\nghidra.app.util.opinion.DefLoader\nghidra.app.util.opinion.DyldCacheLoader\nghidra.app.util.opinion.DyldCacheProgramBuilder\nghidra.app.util.opinion.DyldCacheUtils\nghidra.app.util.opinion.DyldCacheUtils.SplitDyldCache\nghidra.app.util.opinion.ElfDataType\nghidra.app.util.opinion.ElfLoader\nghidra.app.util.opinion.ElfLoaderOptionsFactory\nghidra.app.util.opinion.GdtLoader\nghidra.app.util.opinion.GzfLoader\nghidra.app.util.opinion.IntelHexLoader\nghidra.app.util.opinion.IntelHexRecord\nghidra.app.util.opinion.IntelHexRecordReader\nghidra.app.util.opinion.IntelHexRecordWriter\nghidra.app.util.opinion.LibraryLookupTable\nghidra.app.util.opinion.LibraryPathsDialog\nghidra.app.util.opinion.Loader\nghidra.app.util.opinion.Loader\nghidra.app.util.opinion.LoaderMap\nghidra.app.util.opinion.LoaderOpinionException\nghidra.app.util.opinion.LoaderService\nghidra.app.util.opinion.LoaderTier\nghidra.app.util.opinion.LoadSpec\nghidra.app.util.opinion.MachoLoader\nghidra.app.util.opinion.MachoPrelinkProgramBuilder\nghidra.app.util.opinion.MachoPrelinkUtils\nghidra.app.util.opinion.MachoProgramBuilder\nghidra.app.util.opinion.MapLoader\nghidra.app.util.opinion.MemorySectionResolver\nghidra.app.util.opinion.MotorolaHexLoader\nghidra.app.util.opinion.MSCoffLoader\nghidra.app.util.opinion.MzLoader\nghidra.app.util.opinion.NeLoader\nghidra.app.util.opinion.OmfLoader\nghidra.app.util.opinion.OpinionException\nghidra.app.util.opinion.PeDataType\nghidra.app.util.opinion.PefLoader\nghidra.app.util.opinion.PeLoader\nghidra.app.util.opinion.PeLoader.CompilerOpinion\nghidra.app.util.opinion.PeLoader.CompilerOpinion.CompilerEnum\nghidra.app.util.opinion.QueryOpinionService\nghidra.app.util.opinion.QueryOpinionServiceHandler\nghidra.app.util.opinion.QueryResult\nghidra.app.util.opinion.XmlLoader\nghidra.app.util.Option\nghidra.app.util.OptionException\nghidra.app.util.OptionListener\nghidra.app.util.OptionsDialog\nghidra.app.util.OptionsEditorPanel\nghidra.app.util.OptionUtils\nghidra.app.util.OptionValidator\nghidra.app.util.parser.FunctionSignatureParser\nghidra.app.util.pcode.PcodeFormatter\nghidra.app.util.Permissions\nghidra.app.util.PluginConstants\nghidra.app.util.ProcessorInfo\nghidra.app.util.ProgramDropProvider\nghidra.app.util.PseudoData\nghidra.app.util.PseudoDisassembler\nghidra.app.util.PseudoDisassemblerContext\nghidra.app.util.PseudoFlowProcessor\nghidra.app.util.PseudoInstruction\nghidra.app.util.query.AddressAlignmentListener\nghidra.app.util.query.AlignedObjectBasedPreviewTableModel\nghidra.app.util.query.ProgramLocationPreviewTableModel\nghidra.app.util.query.TableService\nghidra.app.util.recognizer.Recognizer\nghidra.app.util.recognizer.RecognizerService\nghidra.app.util.RefRepeatComment\nghidra.app.util.RepeatInstructionByteTracker\nghidra.app.util.SelectionTransferable\nghidra.app.util.SelectionTransferData\nghidra.app.util.SymbolInspector\nghidra.app.util.SymbolPath\nghidra.app.util.SymbolPathParser\nghidra.app.util.task.OpenProgramTask\nghidra.app.util.ToolTipUtils\nghidra.app.util.viewer.field.AbstractVariableFieldFactory\nghidra.app.util.viewer.field.AddressAnnotatedStringHandler\nghidra.app.util.viewer.field.AddressFieldFactory\nghidra.app.util.viewer.field.AddressFieldOptionsPropertyEditor\nghidra.app.util.viewer.field.AddressFieldOptionsWrappedOption\nghidra.app.util.viewer.field.AnnotatedMouseHandler\nghidra.app.util.viewer.field.AnnotatedStringFieldMouseHandler\nghidra.app.util.viewer.field.AnnotatedStringHandler\nghidra.app.util.viewer.field.Annotation\nghidra.app.util.viewer.field.AnnotationException\nghidra.app.util.viewer.field.ArrayElementFieldLocation\nghidra.app.util.viewer.field.ArrayElementPropertyEditor\nghidra.app.util.viewer.field.ArrayElementWrappedOption\nghidra.app.util.viewer.field.ArrayValuesFieldFactory\nghidra.app.util.viewer.field.AssignedVariableFieldFactory\nghidra.app.util.viewer.field.BrowserCodeUnitFormat\nghidra.app.util.viewer.field.BrowserCodeUnitFormatOptions\nghidra.app.util.viewer.field.BytesFieldFactory\nghidra.app.util.viewer.field.CommentFieldMouseHandler\nghidra.app.util.viewer.field.CommentUtils\nghidra.app.util.viewer.field.DummyFieldFactory\nghidra.app.util.viewer.field.EolCommentFieldFactory\nghidra.app.util.viewer.field.ErrorFieldMouseHandler\nghidra.app.util.viewer.field.ExecutableTaskStringHandler\nghidra.app.util.viewer.field.FieldFactory\nghidra.app.util.viewer.field.FieldHighlightFactory\nghidra.app.util.viewer.field.FieldMouseHandler\nghidra.app.util.viewer.field.FieldMouseHandlerExtension\nghidra.app.util.viewer.field.FieldMouseHandlerExtension\nghidra.app.util.viewer.field.FieldNameFieldFactory\nghidra.app.util.viewer.field.FieldNameFieldFactory.IndexFormat\nghidra.app.util.viewer.field.FieldStringInfo\nghidra.app.util.viewer.field.FunctionCallFixupFieldFactory\nghidra.app.util.viewer.field.FunctionPurgeFieldFactory\nghidra.app.util.viewer.field.FunctionRepeatableCommentFieldFactory\nghidra.app.util.viewer.field.FunctionRepeatableCommentFieldMouseHandler\nghidra.app.util.viewer.field.FunctionSignatureFieldFactory\nghidra.app.util.viewer.field.FunctionSignatureSourceFieldFactory\nghidra.app.util.viewer.field.FunctionTagFieldFactory\nghidra.app.util.viewer.field.ImageFactoryField\nghidra.app.util.viewer.field.ImageFactoryFieldMouseHandler\nghidra.app.util.viewer.field.IndentField\nghidra.app.util.viewer.field.InstructionMaskValueFieldFactory\nghidra.app.util.viewer.field.InvalidAnnotatedStringHandler\nghidra.app.util.viewer.field.LabelCodeUnitFormat\nghidra.app.util.viewer.field.LabelFieldFactory\nghidra.app.util.viewer.field.ListingField\nghidra.app.util.viewer.field.ListingTextField\nghidra.app.util.viewer.field.MemoryBlockStartFieldFactory\nghidra.app.util.viewer.field.MnemonicFieldFactory\nghidra.app.util.viewer.field.MnemonicFieldMouseHandler\nghidra.app.util.viewer.field.NamespacePropertyEditor\nghidra.app.util.viewer.field.NamespaceWrappedOption\nghidra.app.util.viewer.field.OpenCloseField\nghidra.app.util.viewer.field.OpenCloseFieldFactory\nghidra.app.util.viewer.field.OpenCloseFieldMouseHandler\nghidra.app.util.viewer.field.OperandFieldFactory\nghidra.app.util.viewer.field.OperandFieldMouseHandler\nghidra.app.util.viewer.field.OptionsBasedDataTypeDisplayOptions\nghidra.app.util.viewer.field.ParallelInstructionFieldFactory\nghidra.app.util.viewer.field.PcodeFieldMouseHandler\nghidra.app.util.viewer.field.PlateFieldFactory\nghidra.app.util.viewer.field.PostCommentFieldFactory\nghidra.app.util.viewer.field.PreCommentFieldFactory\nghidra.app.util.viewer.field.ProgramAnnotatedStringHandler\nghidra.app.util.viewer.field.RegisterFieldFactory\nghidra.app.util.viewer.field.RegisterTransitionFieldFactory\nghidra.app.util.viewer.field.ResourceFieldLocation\nghidra.app.util.viewer.field.SeparatorFieldFactory\nghidra.app.util.viewer.field.SpaceFieldFactory\nghidra.app.util.viewer.field.SpacerFieldFactory\nghidra.app.util.viewer.field.SubDataFieldFactory\nghidra.app.util.viewer.field.SymbolAnnotatedStringHandler\nghidra.app.util.viewer.field.ThunkedFunctionFieldFactory\nghidra.app.util.viewer.field.ThunkedFunctionFieldMouseHandler\nghidra.app.util.viewer.field.URLAnnotatedStringHandler\nghidra.app.util.viewer.field.VariableCommentFieldFactory\nghidra.app.util.viewer.field.VariableCommentFieldMouseHandler\nghidra.app.util.viewer.field.VariableLocFieldFactory\nghidra.app.util.viewer.field.VariableNameFieldFactory\nghidra.app.util.viewer.field.VariableTypeFieldFactory\nghidra.app.util.viewer.field.VariableXRefFieldFactory\nghidra.app.util.viewer.field.VariableXRefFieldMouseHandler\nghidra.app.util.viewer.field.VariableXRefHeaderFieldFactory\nghidra.app.util.viewer.field.XRefFieldFactory\nghidra.app.util.viewer.field.XRefFieldFactory.SORT_CHOICE\nghidra.app.util.viewer.field.XRefFieldMouseHandler\nghidra.app.util.viewer.field.XRefHeaderFieldFactory\nghidra.app.util.viewer.format.actions.AddAllFieldAction\nghidra.app.util.viewer.format.actions.AddFieldAction\nghidra.app.util.viewer.format.actions.AddSpacerFieldAction\nghidra.app.util.viewer.format.actions.DisableFieldAction\nghidra.app.util.viewer.format.actions.EnableFieldAction\nghidra.app.util.viewer.format.actions.InsertRowAction\nghidra.app.util.viewer.format.actions.RemoveAllFieldsAction\nghidra.app.util.viewer.format.actions.RemoveFieldAction\nghidra.app.util.viewer.format.actions.RemoveRowAction\nghidra.app.util.viewer.format.actions.ResetAllFormatsAction\nghidra.app.util.viewer.format.actions.ResetFormatAction\nghidra.app.util.viewer.format.actions.SetSpacerTextAction\nghidra.app.util.viewer.format.ErrorListingField\nghidra.app.util.viewer.format.FieldFactoryNameMapper\nghidra.app.util.viewer.format.FieldFormatModel\nghidra.app.util.viewer.format.FieldHeader\nghidra.app.util.viewer.format.FieldHeaderComp\nghidra.app.util.viewer.format.FieldHeaderLocation\nghidra.app.util.viewer.format.FormatManager\nghidra.app.util.viewer.format.FormatModelListener\nghidra.app.util.viewer.listingpanel.AddressSetDisplayListener\nghidra.app.util.viewer.listingpanel.ApplyFunctionSignatureAction\nghidra.app.util.viewer.listingpanel.DualListingActionContext\nghidra.app.util.viewer.listingpanel.DualListingFieldPanelCoordinator\nghidra.app.util.viewer.listingpanel.EmptyListingModel\nghidra.app.util.viewer.listingpanel.ListingBackgroundColorModel\nghidra.app.util.viewer.listingpanel.ListingCodeComparisonOptions\nghidra.app.util.viewer.listingpanel.ListingCodeComparisonPanel\nghidra.app.util.viewer.listingpanel.ListingComparisonFieldPanelCoordinator\nghidra.app.util.viewer.listingpanel.ListingComparisonProvider\nghidra.app.util.viewer.listingpanel.ListingDiffActionManager\nghidra.app.util.viewer.listingpanel.ListingDiffChangeListener\nghidra.app.util.viewer.listingpanel.ListingDiffHighlightProvider\nghidra.app.util.viewer.listingpanel.ListingHoverProvider\nghidra.app.util.viewer.listingpanel.ListingModel\nghidra.app.util.viewer.listingpanel.ListingModelAdapter\nghidra.app.util.viewer.listingpanel.ListingModelListener\nghidra.app.util.viewer.listingpanel.ListingPanel\nghidra.app.util.viewer.listingpanel.MarginProvider\nghidra.app.util.viewer.listingpanel.MarkerClickedListener\nghidra.app.util.viewer.listingpanel.OverviewProvider\nghidra.app.util.viewer.listingpanel.ProgramBigListingModel\nghidra.app.util.viewer.listingpanel.ProgramLocationListener\nghidra.app.util.viewer.listingpanel.ProgramSelectionListener\nghidra.app.util.viewer.listingpanel.PropertyBasedBackgroundColorModel\nghidra.app.util.viewer.listingpanel.StringSelectionListener\nghidra.app.util.viewer.listingpanel.VerticalPixelAddressMap\nghidra.app.util.viewer.multilisting.AddressTranslator\nghidra.app.util.viewer.multilisting.LayoutCache\nghidra.app.util.viewer.multilisting.ListingModelConverter\nghidra.app.util.viewer.multilisting.MultiListingLayoutModel\nghidra.app.util.viewer.options.ListingDisplayOptionsEditor\nghidra.app.util.viewer.options.OptionsGui\nghidra.app.util.viewer.options.ScreenElement\nghidra.app.util.viewer.proxy.AddressProxy\nghidra.app.util.viewer.proxy.CodeUnitProxy\nghidra.app.util.viewer.proxy.DataProxy\nghidra.app.util.viewer.proxy.EmptyProxy\nghidra.app.util.viewer.proxy.FunctionProxy\nghidra.app.util.viewer.proxy.ProxyObj\nghidra.app.util.viewer.proxy.VariableProxy\nghidra.app.util.viewer.util.AddressBasedIndexMapper\nghidra.app.util.viewer.util.AddressIndexMap\nghidra.app.util.viewer.util.AddressIndexMapConverter\nghidra.app.util.viewer.util.AddressPixelMap\nghidra.app.util.viewer.util.CodeComparisonPanel\nghidra.app.util.viewer.util.CodeComparisonPanelActionContext\nghidra.app.util.viewer.util.FieldNavigator\nghidra.app.util.viewer.util.MemoryBlockMap\nghidra.app.util.viewer.util.OpenCloseManager\nghidra.app.util.viewer.util.ScrollpaneAlignedHorizontalLayout\nghidra.app.util.viewer.util.ScrollpanelResizeablePanelLayout\nghidra.app.util.viewer.util.TitledPanel\nghidra.app.util.viewer.util.VerticalPixelAddressMapImpl\nghidra.app.util.xml.DataTypesXmlMgr\nghidra.app.util.xml.ProgramInfo\nghidra.app.util.xml.ProgramXmlMgr\nghidra.app.util.xml.XMLErrorHandler\nghidra.app.util.xml.XmlProgramOptions\nghidra.app.util.XReferenceUtil\nghidra.app.util.XReferenceUtils\nghidra.base.actions.HorizontalRuleAction\nghidra.base.help.GhidraHelpService\nghidra.base.project.GhidraProject\nghidra.base.widgets.table.constraint.provider.AddressBasedLocationColumnTypeMapper\nghidra.base.widgets.table.constraint.provider.DataTypeColumnTypeMapper\nghidra.base.widgets.table.constraint.provider.NamespaceColumnTypeMapper\nghidra.base.widgets.table.constraint.provider.ProgramColumnConstraintProvider\nghidra.base.widgets.table.constraint.provider.ProgramLocationColumnTypeMapper\nghidra.base.widgets.table.constraint.provider.ScalarToLongColumnTypeMapper\nghidra.base.widgets.table.constraint.provider.SymbolColumnTypeMapper\nghidra.docking.settings.BooleanSettingsDefinition\nghidra.docking.settings.EnumSettingsDefinition\nghidra.docking.settings.FloatingPointPrecisionSettingsDefinition\nghidra.docking.settings.FormatSettingsDefinition\nghidra.docking.settings.IntegerSignednessFormattingModeSettingsDefinition\nghidra.docking.settings.JavaEnumSettingsDefinition\nghidra.docking.settings.Settings\nghidra.docking.settings.SettingsDefinition\nghidra.docking.settings.SettingsImpl\nghidra.docking.util.DockingWindowsLookAndFeelUtils\nghidra.docking.util.painting.Graphics2DWrapper\nghidra.docking.util.painting.GRepaintManager\nghidra.formats.gfilesystem.AbstractFileExtractorTask\nghidra.formats.gfilesystem.annotations.FileSystemInfo\nghidra.formats.gfilesystem.crypto.CachedPasswordProvider\nghidra.formats.gfilesystem.crypto.CmdLinePasswordProvider\nghidra.formats.gfilesystem.crypto.CryptoProvider\nghidra.formats.gfilesystem.crypto.CryptoProvider.Session\nghidra.formats.gfilesystem.crypto.CryptoProviders\nghidra.formats.gfilesystem.crypto.CryptoProviderSessionChildImpl\nghidra.formats.gfilesystem.crypto.CryptoSession\nghidra.formats.gfilesystem.crypto.PasswordProvider\nghidra.formats.gfilesystem.crypto.PasswordValue\nghidra.formats.gfilesystem.crypto.PopupGUIPasswordProvider\nghidra.formats.gfilesystem.factory.FileSystemFactoryMgr\nghidra.formats.gfilesystem.factory.FileSystemInfoRec\nghidra.formats.gfilesystem.factory.GFileSystemBaseFactory\nghidra.formats.gfilesystem.factory.GFileSystemFactory\nghidra.formats.gfilesystem.factory.GFileSystemFactoryByteProvider\nghidra.formats.gfilesystem.factory.GFileSystemFactoryIgnore\nghidra.formats.gfilesystem.factory.GFileSystemProbe\nghidra.formats.gfilesystem.factory.GFileSystemProbeByteProvider\nghidra.formats.gfilesystem.factory.GFileSystemProbeBytesOnly\nghidra.formats.gfilesystem.FileCache\nghidra.formats.gfilesystem.FileCache.FileCacheEntry\nghidra.formats.gfilesystem.FileCache.FileCacheEntryBuilder\nghidra.formats.gfilesystem.FileCacheNameIndex\nghidra.formats.gfilesystem.fileinfo.FileAttribute\nghidra.formats.gfilesystem.fileinfo.FileAttributes\nghidra.formats.gfilesystem.fileinfo.FileAttributeType\nghidra.formats.gfilesystem.fileinfo.FileAttributeTypeGroup\nghidra.formats.gfilesystem.fileinfo.FileType\nghidra.formats.gfilesystem.FileSystemEventListener\nghidra.formats.gfilesystem.FileSystemIndexHelper\nghidra.formats.gfilesystem.FileSystemProbeConflictResolver\nghidra.formats.gfilesystem.FileSystemRef\nghidra.formats.gfilesystem.FileSystemRefManager\nghidra.formats.gfilesystem.FileSystemService\nghidra.formats.gfilesystem.FileSystemService.DerivedStreamProducer\nghidra.formats.gfilesystem.FileSystemService.DerivedStreamPushProducer\nghidra.formats.gfilesystem.FSRL\nghidra.formats.gfilesystem.FSRLRoot\nghidra.formats.gfilesystem.FSUtilities\nghidra.formats.gfilesystem.GFile\nghidra.formats.gfilesystem.GFileHashProvider\nghidra.formats.gfilesystem.GFileImpl\nghidra.formats.gfilesystem.GFileLocal\nghidra.formats.gfilesystem.GFileSystem\nghidra.formats.gfilesystem.GFileSystem\nghidra.formats.gfilesystem.GFileSystemBase\nghidra.formats.gfilesystem.GFileSystemProgramProvider\nghidra.formats.gfilesystem.GIconProvider\nghidra.formats.gfilesystem.LocalFileSystem\nghidra.formats.gfilesystem.LocalFileSystemSub\nghidra.formats.gfilesystem.RefdByteProvider\nghidra.formats.gfilesystem.RefdFile\nghidra.formats.gfilesystem.SelectFromListDialog\nghidra.formats.gfilesystem.SingleFileSystemIndexHelper\nghidra.framework.Application\nghidra.framework.ApplicationConfiguration\nghidra.framework.ApplicationIdentifier\nghidra.framework.ApplicationProperties\nghidra.framework.ApplicationVersion\nghidra.framework.Architecture\nghidra.framework.client.ClientAuthenticator\nghidra.framework.client.ClientUtil\nghidra.framework.client.DefaultClientAuthenticator\nghidra.framework.client.HeadlessClientAuthenticator\nghidra.framework.client.NotConnectedException\nghidra.framework.client.PasswordClientAuthenticator\nghidra.framework.client.RemoteAdapterListener\nghidra.framework.client.RepositoryAdapter\nghidra.framework.client.RepositoryServerAdapter\nghidra.framework.cmd.BackgroundCommand\nghidra.framework.cmd.BackgroundCommandListener\nghidra.framework.cmd.BinaryAnalysisCommand\nghidra.framework.cmd.Command\nghidra.framework.cmd.CompoundBackgroundCommand\nghidra.framework.cmd.CompoundCmd\nghidra.framework.cmd.MergeableBackgroundCommand\nghidra.framework.data.CheckinHandler\nghidra.framework.data.ContentHandler\nghidra.framework.data.ConvertFileSystem\nghidra.framework.data.ConvertFileSystem.ConvertFileSystemException\nghidra.framework.data.ConvertFileSystem.MessageListener\nghidra.framework.data.DBContentHandler\nghidra.framework.data.DefaultCheckinHandler\nghidra.framework.data.DomainFileProxy\nghidra.framework.data.DomainObjectAdapter\nghidra.framework.data.DomainObjectAdapterDB\nghidra.framework.data.DomainObjectDBChangeSet\nghidra.framework.data.DomainObjectMergeManager\nghidra.framework.data.GhidraFile\nghidra.framework.data.GhidraFileData\nghidra.framework.data.GhidraFolder\nghidra.framework.data.GhidraToolState\nghidra.framework.data.ProjectFileManager\nghidra.framework.data.RootGhidraFolder\nghidra.framework.data.RootGhidraFolderData\nghidra.framework.data.ToolState\nghidra.framework.data.ToolStateFactory\nghidra.framework.data.TransientDataManager\nghidra.framework.GenericRunInfo\nghidra.framework.GhidraApplicationConfiguration\nghidra.framework.GModule\nghidra.framework.HeadlessGhidraApplicationConfiguration\nghidra.framework.Log4jErrorLogger\nghidra.framework.LoggingInitialization\nghidra.framework.main.AppInfo\nghidra.framework.main.ConsoleListener\nghidra.framework.main.ConsoleTextPane\nghidra.framework.main.datatable.DomainFileContext\nghidra.framework.main.datatable.DomainFileInfo\nghidra.framework.main.datatable.DomainFileProviderContextAction\nghidra.framework.main.datatable.DomainFileType\nghidra.framework.main.datatable.FrontendProjectTreeAction\nghidra.framework.main.datatable.ProjectDataColumn\nghidra.framework.main.datatable.ProjectDataContext\nghidra.framework.main.datatable.ProjectDataContextToggleAction\nghidra.framework.main.datatable.ProjectDataTableDnDHandler\nghidra.framework.main.datatable.ProjectDataTableModel\nghidra.framework.main.datatable.ProjectDataTablePanel\nghidra.framework.main.datatable.ProjectTreeAction\nghidra.framework.main.datatable.ProjectTreeContext\nghidra.framework.main.datatree.ArchiveProvider\nghidra.framework.main.datatree.ChangedFilesDialog\nghidra.framework.main.datatree.CheckInTask\nghidra.framework.main.datatree.CheckoutDialog\nghidra.framework.main.datatree.CheckoutsPanel\nghidra.framework.main.datatree.ClearCutAction\nghidra.framework.main.datatree.CopyTask\nghidra.framework.main.datatree.Cuttable\nghidra.framework.main.datatree.DataTree\nghidra.framework.main.datatree.DataTreeClipboardUtils\nghidra.framework.main.datatree.DataTreeDragNDropHandler\nghidra.framework.main.datatree.DataTreeFlavorHandler\nghidra.framework.main.datatree.DialogProjectTreeContext\nghidra.framework.main.datatree.DomainFileNode\nghidra.framework.main.datatree.DomainFolderNode\nghidra.framework.main.datatree.DomainFolderRootNode\nghidra.framework.main.datatree.FindCheckoutsDialog\nghidra.framework.main.datatree.FrontEndProjectTreeContext\nghidra.framework.main.datatree.GhidraDataFlavorHandlerService\nghidra.framework.main.datatree.JavaFileListHandler\nghidra.framework.main.datatree.LinuxFileUrlHandler\nghidra.framework.main.datatree.LocalTreeNodeHandler\nghidra.framework.main.datatree.LocalVersionInfoHandler\nghidra.framework.main.datatree.NoProjectNode\nghidra.framework.main.datatree.PasteFileTask\nghidra.framework.main.datatree.ProjectDataTreePanel\nghidra.framework.main.datatree.UndoActionDialog\nghidra.framework.main.datatree.VersionControlDataTypeArchiveUndoCheckoutAction\nghidra.framework.main.datatree.VersionControlDialog\nghidra.framework.main.datatree.VersionControlTask\nghidra.framework.main.datatree.VersionHistoryDialog\nghidra.framework.main.datatree.VersionHistoryPanel\nghidra.framework.main.datatree.VersionInfo\nghidra.framework.main.datatree.VersionInfoTransferable\nghidra.framework.main.DataTreeDialog\nghidra.framework.main.DialogProjectDataCollapseAction\nghidra.framework.main.DialogProjectDataExpandAction\nghidra.framework.main.DialogProjectDataNewFolderAction\nghidra.framework.main.FrontEndable\nghidra.framework.main.FrontEndOnly\nghidra.framework.main.FrontEndPlugin\nghidra.framework.main.FrontEndProjectDataCollapseAction\nghidra.framework.main.FrontEndProjectDataExpandAction\nghidra.framework.main.FrontEndProjectDataNewFolderAction\nghidra.framework.main.FrontEndService\nghidra.framework.main.FrontEndTool\nghidra.framework.main.GetVersionedObjectTask\nghidra.framework.main.GhidraApplicationInformationDisplayFactory\nghidra.framework.main.LogPanel\nghidra.framework.main.logviewer.event.ArrowDownAction\nghidra.framework.main.logviewer.event.ArrowDownSelectionAction\nghidra.framework.main.logviewer.event.ArrowUpAction\nghidra.framework.main.logviewer.event.ArrowUpSelectionAction\nghidra.framework.main.logviewer.event.EndAction\nghidra.framework.main.logviewer.event.FVEvent\nghidra.framework.main.logviewer.event.FVEvent.EventType\nghidra.framework.main.logviewer.event.FVEventListener\nghidra.framework.main.logviewer.event.HomeAction\nghidra.framework.main.logviewer.event.MouseWheelAction\nghidra.framework.main.logviewer.event.PageDownAction\nghidra.framework.main.logviewer.event.PageDownSelectionAction\nghidra.framework.main.logviewer.event.PageUpAction\nghidra.framework.main.logviewer.event.PageUpSelectionAction\nghidra.framework.main.logviewer.model.Chunk\nghidra.framework.main.logviewer.model.ChunkModel\nghidra.framework.main.logviewer.model.ChunkReader\nghidra.framework.main.logviewer.model.Pair\nghidra.framework.main.logviewer.model.ReverseLineReader\nghidra.framework.main.logviewer.ui.FileViewer\nghidra.framework.main.logviewer.ui.FileWatcher\nghidra.framework.main.logviewer.ui.FVSlider\nghidra.framework.main.logviewer.ui.FVSliderUI\nghidra.framework.main.logviewer.ui.FVTable\nghidra.framework.main.logviewer.ui.FVTableModel\nghidra.framework.main.logviewer.ui.FVToolBar\nghidra.framework.main.logviewer.ui.LogLevelTableCellRenderer\nghidra.framework.main.logviewer.ui.ReloadDialog\nghidra.framework.main.logviewer.ui.ViewportUtility\nghidra.framework.main.OpenVersionedFileDialog\nghidra.framework.main.PickToolDialog\nghidra.framework.main.ProgramaticUseOnly\nghidra.framework.main.ProjectAccessPanel\nghidra.framework.main.projectdata.actions.CheckoutsActionContext\nghidra.framework.main.projectdata.actions.CheckoutsDialog\nghidra.framework.main.projectdata.actions.DeleteProjectFilesTask\nghidra.framework.main.projectdata.actions.FindCheckoutsAction\nghidra.framework.main.projectdata.actions.ProjectDataCollapseAction\nghidra.framework.main.projectdata.actions.ProjectDataCopyAction\nghidra.framework.main.projectdata.actions.ProjectDataCopyCutBaseAction\nghidra.framework.main.projectdata.actions.ProjectDataCutAction\nghidra.framework.main.projectdata.actions.ProjectDataDeleteAction\nghidra.framework.main.projectdata.actions.ProjectDataDeleteTask\nghidra.framework.main.projectdata.actions.ProjectDataExpandAction\nghidra.framework.main.projectdata.actions.ProjectDataNewFolderAction\nghidra.framework.main.projectdata.actions.ProjectDataOpenDefaultToolAction\nghidra.framework.main.projectdata.actions.ProjectDataOpenToolAction\nghidra.framework.main.projectdata.actions.ProjectDataPasteAction\nghidra.framework.main.projectdata.actions.ProjectDataReadOnlyAction\nghidra.framework.main.projectdata.actions.ProjectDataRefreshAction\nghidra.framework.main.projectdata.actions.ProjectDataRenameAction\nghidra.framework.main.projectdata.actions.ProjectDataSelectAction\nghidra.framework.main.projectdata.actions.VersionControlAction\nghidra.framework.main.projectdata.actions.VersionControlAddAction\nghidra.framework.main.projectdata.actions.VersionControlCheckInAction\nghidra.framework.main.projectdata.actions.VersionControlCheckOutAction\nghidra.framework.main.projectdata.actions.VersionControlShowHistoryAction\nghidra.framework.main.projectdata.actions.VersionControlUndoCheckOutAction\nghidra.framework.main.projectdata.actions.VersionControlUndoHijackAction\nghidra.framework.main.projectdata.actions.VersionControlUpdateAction\nghidra.framework.main.projectdata.actions.VersionControlViewCheckOutAction\nghidra.framework.main.ProjectInfoDialog\nghidra.framework.main.RepositoryPanel\nghidra.framework.main.SaveDataDialog\nghidra.framework.main.ServerInfoComponent\nghidra.framework.main.ServerInfoPanel\nghidra.framework.main.TestFrontEndTool\nghidra.framework.main.ToolButtonTransferable\nghidra.framework.main.UserAgreementDialog\nghidra.framework.main.ViewProjectAccessPanel\nghidra.framework.main.ZoomedImagePainter\nghidra.framework.model.AbortedTransactionListener\nghidra.framework.model.ChangeSet\nghidra.framework.model.DefaultToolChangeListener\nghidra.framework.model.DomainFile\nghidra.framework.model.DomainFileFilter\nghidra.framework.model.DomainFolder\nghidra.framework.model.DomainFolderChangeListener\nghidra.framework.model.DomainFolderListenerAdapter\nghidra.framework.model.DomainObject\nghidra.framework.model.DomainObjectChangedEvent\nghidra.framework.model.DomainObjectChangeRecord\nghidra.framework.model.DomainObjectClosedListener\nghidra.framework.model.DomainObjectException\nghidra.framework.model.DomainObjectListener\nghidra.framework.model.DomainObjectLockedException\nghidra.framework.model.EventQueueID\nghidra.framework.model.Project\nghidra.framework.model.ProjectData\nghidra.framework.model.ProjectDataUtils\nghidra.framework.model.ProjectDataUtils.DomainFileIterator\nghidra.framework.model.ProjectDataUtils.DomainFolderIterator\nghidra.framework.model.ProjectListener\nghidra.framework.model.ProjectLocator\nghidra.framework.model.ProjectManager\nghidra.framework.model.ServerInfo\nghidra.framework.model.ToolAssociationInfo\nghidra.framework.model.ToolChest\nghidra.framework.model.ToolChestChangeListener\nghidra.framework.model.ToolConnection\nghidra.framework.model.ToolListener\nghidra.framework.model.ToolManager\nghidra.framework.model.ToolServices\nghidra.framework.model.ToolSet\nghidra.framework.model.ToolTemplate\nghidra.framework.model.Transaction\nghidra.framework.model.TransactionListener\nghidra.framework.model.Undoable\nghidra.framework.model.UndoableDomainObject\nghidra.framework.model.UndoableDomainObject\nghidra.framework.model.UserData\nghidra.framework.model.Workspace\nghidra.framework.model.WorkspaceChangeListener\nghidra.framework.model.XmlDataReader\nghidra.framework.ModuleInitializer\nghidra.framework.ModuleInitializer\nghidra.framework.OperatingSystem\nghidra.framework.options.AbstractOptions\nghidra.framework.options.AbstractOptions.AliasBinding\nghidra.framework.options.CustomOption\nghidra.framework.options.CustomOptionsEditor\nghidra.framework.options.EditorState\nghidra.framework.options.EditorStateFactory\nghidra.framework.options.EnumEditor\nghidra.framework.options.ErrorPropertyEditor\nghidra.framework.options.FileOptions\nghidra.framework.options.NoRegisteredEditorPropertyEditor\nghidra.framework.options.Option\nghidra.framework.options.Options\nghidra.framework.options.OptionsChangeListener\nghidra.framework.options.OptionsEditor\nghidra.framework.options.OptionType\nghidra.framework.options.OptionType.ByteArrayStringAdapter\nghidra.framework.options.PreferenceState\nghidra.framework.options.PropertyBoolean\nghidra.framework.options.PropertySelector\nghidra.framework.options.PropertyText\nghidra.framework.options.SaveState\nghidra.framework.options.SubOptions\nghidra.framework.options.ToolOptions\nghidra.framework.options.WrappedCustomOption\nghidra.framework.options.WrappedDate\nghidra.framework.options.WrappedFile\nghidra.framework.options.WrappedOption\nghidra.framework.OSFileNotFoundException\nghidra.framework.Platform\nghidra.framework.PluggableServiceRegistry\nghidra.framework.PluggableServiceRegistryException\nghidra.framework.plugintool.BusyToolException\nghidra.framework.plugintool.ComponentProviderAdapter\nghidra.framework.plugintool.dialog.AbstractDetailsPanel\nghidra.framework.plugintool.dialog.ExtensionDetails\nghidra.framework.plugintool.dialog.ExtensionException\nghidra.framework.plugintool.dialog.ExtensionException.ExtensionExceptionType\nghidra.framework.plugintool.dialog.ExtensionTablePanel\nghidra.framework.plugintool.dialog.ExtensionTableProvider\nghidra.framework.plugintool.dialog.ExtensionUtils\nghidra.framework.plugintool.dialog.KeyBindingsPanel\nghidra.framework.plugintool.dialog.ManagePluginsDialog\nghidra.framework.plugintool.dialog.PluginInstallerDialog\nghidra.framework.plugintool.dialog.PluginManagerComponent\nghidra.framework.plugintool.dialog.SaveToolConfigDialog\nghidra.framework.plugintool.GenericStandAloneApplication\nghidra.framework.plugintool.mgr.DialogManager\nghidra.framework.plugintool.mgr.EventManager\nghidra.framework.plugintool.mgr.OptionsManager\nghidra.framework.plugintool.mgr.ServiceManager\nghidra.framework.plugintool.mgr.ToolTaskManager\nghidra.framework.plugintool.ModalPluginTool\nghidra.framework.plugintool.NavigatableComponentProviderAdapter\nghidra.framework.plugintool.Plugin\nghidra.framework.plugintool.PluginConfigurationModel\nghidra.framework.plugintool.PluginEvent\nghidra.framework.plugintool.PluginInfo\nghidra.framework.plugintool.PluginTool\nghidra.framework.plugintool.PluginToolMacAboutHandler\nghidra.framework.plugintool.PluginToolMacQuitHandler\nghidra.framework.plugintool.ServiceInfo\nghidra.framework.plugintool.ServiceInterfaceImplementationPair\nghidra.framework.plugintool.ServiceProvider\nghidra.framework.plugintool.ServiceProviderDecorator\nghidra.framework.plugintool.ServiceProviderStub\nghidra.framework.plugintool.SettableApplicationInformationDisplayFactory\nghidra.framework.plugintool.StandAloneApplication\nghidra.framework.plugintool.StandAlonePluginTool\nghidra.framework.plugintool.ToolEventName\nghidra.framework.plugintool.ToolServicesAdapter\nghidra.framework.plugintool.util.OptionsService\nghidra.framework.plugintool.util.PluginClassManager\nghidra.framework.plugintool.util.PluginConstructionException\nghidra.framework.plugintool.util.PluginDescription\nghidra.framework.plugintool.util.PluginEventListener\nghidra.framework.plugintool.util.PluginException\nghidra.framework.plugintool.util.PluginPackage\nghidra.framework.plugintool.util.PluginPackageState\nghidra.framework.plugintool.util.PluginStatus\nghidra.framework.plugintool.util.PluginUtils\nghidra.framework.plugintool.util.ServiceListener\nghidra.framework.plugintool.util.TransientToolState\nghidra.framework.plugintool.util.UndoRedoToolState\nghidra.framework.preferences.Preferences\nghidra.framework.project.DefaultProject\nghidra.framework.project.DefaultProjectManager\nghidra.framework.project.ProjectDataService\nghidra.framework.project.tool.GhidraTool\nghidra.framework.project.tool.GhidraToolTemplate\nghidra.framework.project.tool.SelectChangedToolDialog\nghidra.framework.project.tool.ToolManagerImpl\nghidra.framework.protocol.ghidra.DefaultGhidraProtocolConnector\nghidra.framework.protocol.ghidra.DefaultGhidraProtocolHandler\nghidra.framework.protocol.ghidra.DefaultLocalGhidraProtocolConnector\nghidra.framework.protocol.ghidra.GhidraProtocolConnector\nghidra.framework.protocol.ghidra.GhidraProtocolHandler\nghidra.framework.protocol.ghidra.GhidraURL\nghidra.framework.protocol.ghidra.GhidraURLConnection\nghidra.framework.protocol.ghidra.GhidraURLWrappedContent\nghidra.framework.protocol.ghidra.Handler\nghidra.framework.protocol.ghidra.RepositoryInfo\nghidra.framework.protocol.ghidra.TransientProjectData\nghidra.framework.protocol.ghidra.TransientProjectManager\nghidra.framework.remote.AnonymousCallback\nghidra.framework.remote.GhidraPrincipal\nghidra.framework.remote.GhidraServerHandle\nghidra.framework.remote.InetNameLookup\nghidra.framework.remote.RemoteRepositoryHandle\nghidra.framework.remote.RemoteRepositoryHandle\nghidra.framework.remote.RemoteRepositoryServerHandle\nghidra.framework.remote.RemoteRepositoryServerHandle\nghidra.framework.remote.RepositoryChangeEvent\nghidra.framework.remote.RepositoryHandle\nghidra.framework.remote.RepositoryItem\nghidra.framework.remote.RepositoryServerHandle\nghidra.framework.remote.RMIServerPortFactory\nghidra.framework.remote.security.SSHKeyManager\nghidra.framework.remote.SignatureCallback\nghidra.framework.remote.SSHSignatureCallback\nghidra.framework.remote.User\nghidra.framework.ShutdownHookRegistry\nghidra.framework.ShutdownHookRegistry.ShutdownHook\nghidra.framework.ShutdownPriority\nghidra.framework.store.CheckoutType\nghidra.framework.store.DatabaseItem\nghidra.framework.store.DataFileHandle\nghidra.framework.store.DataFileItem\nghidra.framework.store.db.PackedDatabase\nghidra.framework.store.db.PackedDatabaseCache\nghidra.framework.store.db.PackedDBHandle\nghidra.framework.store.db.PrivateDatabase\nghidra.framework.store.db.VersionedDatabase\nghidra.framework.store.db.VersionedDBListener\nghidra.framework.store.ExclusiveCheckoutException\nghidra.framework.store.FileIDFactory\nghidra.framework.store.FileSystem\nghidra.framework.store.FileSystemEventManager\nghidra.framework.store.FileSystemInitializer\nghidra.framework.store.FileSystemListener\nghidra.framework.store.FileSystemSynchronizer\nghidra.framework.store.FolderItem\nghidra.framework.store.FolderNotEmptyException\nghidra.framework.store.ItemCheckoutStatus\nghidra.framework.store.local.DataDirectoryException\nghidra.framework.store.local.FileChangeListener\nghidra.framework.store.local.IndexedLocalFileSystem\nghidra.framework.store.local.IndexedLocalFileSystem.BadStorageNameException\nghidra.framework.store.local.IndexedLocalFileSystem.IndexReadException\nghidra.framework.store.local.IndexedLocalFileSystem.IndexVersionException\nghidra.framework.store.local.IndexedPropertyFile\nghidra.framework.store.local.IndexedV1LocalFileSystem\nghidra.framework.store.local.ItemDeserializer\nghidra.framework.store.local.ItemSerializer\nghidra.framework.store.local.LocalDatabaseItem\nghidra.framework.store.local.LocalDataFile\nghidra.framework.store.local.LocalDataFileHandle\nghidra.framework.store.local.LocalFileSystem\nghidra.framework.store.local.LocalFileSystem.ItemStorage\nghidra.framework.store.local.LocalFilesystemTestUtils\nghidra.framework.store.local.LocalFolderItem\nghidra.framework.store.local.LockFile\nghidra.framework.store.local.MangledLocalFileSystem\nghidra.framework.store.local.RepositoryLogger\nghidra.framework.store.local.UnknownFolderItem\nghidra.framework.store.LockException\nghidra.framework.store.remote.RemoteDatabaseItem\nghidra.framework.store.remote.RemoteFileSystem\nghidra.framework.store.remote.RemoteFolderItem\nghidra.framework.store.Version\nghidra.framework.task.GScheduledTask\nghidra.framework.task.GTask\nghidra.framework.task.GTaskGroup\nghidra.framework.task.GTaskListener\nghidra.framework.task.GTaskListenerAdapter\nghidra.framework.task.GTaskManager\nghidra.framework.task.GTaskManagerFactory\nghidra.framework.task.GTaskManagerPanel\nghidra.framework.task.GTaskMonitor\nghidra.framework.task.GTaskResult\nghidra.framework.task.gui.CompletedTaskListModel\nghidra.framework.task.gui.GProgressBar\nghidra.framework.task.gui.GTaskListModel\nghidra.framework.task.gui.GTaskResultPanel\nghidra.framework.task.gui.taskview.AbstractTaskInfo\nghidra.framework.task.gui.taskview.GroupInfo\nghidra.framework.task.gui.taskview.ScheduledTaskPanel\nghidra.framework.task.gui.taskview.TaskInfo\nghidra.framework.task.gui.taskview.TaskViewer\nghidra.framework.task.gui.taskview.TaskViewerComponent\nghidra.framework.TestApplicationUtils\nghidra.framework.ToolUtils\nghidra.generic.util.datastruct.RestrictedValueSortedMap\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedEntryListIterator\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedKeyListIterator\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedSortedList\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedValueListIterator\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedValueSortedMapEntryList\nghidra.generic.util.datastruct.RestrictedValueSortedMap.RestrictedValueSortedMapKeyList\nghidra.generic.util.datastruct.SortedList\nghidra.generic.util.datastruct.TreeSetValuedTreeMap\nghidra.generic.util.datastruct.TreeValueSortedMap\nghidra.generic.util.datastruct.TreeValueSortedMap.EntryListIterator\nghidra.generic.util.datastruct.TreeValueSortedMap.KeyListIterator\nghidra.generic.util.datastruct.TreeValueSortedMap.Node\nghidra.generic.util.datastruct.TreeValueSortedMap.ValueListIterator\nghidra.generic.util.datastruct.TreeValueSortedMap.ValueSortedTreeMapEntrySet\nghidra.generic.util.datastruct.TreeValueSortedMap.ValueSortedTreeMapKeySet\nghidra.generic.util.datastruct.TreeValueSortedMap.ValueSortedTreeMapValues\nghidra.generic.util.datastruct.ValueSortedMap\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapEntryList\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapEntryList\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapEntryList\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapKeyList\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapKeyList\nghidra.generic.util.datastruct.ValueSortedMap.ValueSortedMapKeyList\nghidra.Ghidra\nghidra.GhidraApplicationLayout\nghidra.GhidraClassLoader\nghidra.GhidraException\nghidra.GhidraJarApplicationLayout\nghidra.GhidraLaunchable\nghidra.GhidraLauncher\nghidra.GhidraOptions\nghidra.GhidraOptions.CURSOR_MOUSE_BUTTON_NAMES\nghidra.GhidraRun\nghidra.GhidraTestApplicationLayout\nghidra.GhidraThreadGroup\nghidra.graph.algo.ChkDominanceAlgorithm\nghidra.graph.algo.ChkPostDominanceAlgorithm\nghidra.graph.algo.DepthFirstSorter\nghidra.graph.algo.DijkstraShortestPathsAlgorithm\nghidra.graph.algo.DijkstraShortestPathsAlgorithm.OneSourceToAll\nghidra.graph.algo.FindPathsAlgorithm\nghidra.graph.algo.GraphAlgorithmStatusListener\nghidra.graph.algo.GraphAlgorithmStatusListener.STATUS\nghidra.graph.algo.GraphNavigator\nghidra.graph.algo.IterativeFindPathsAlgorithm\nghidra.graph.algo.JohnsonCircuitsAlgorithm\nghidra.graph.algo.RecursiveFindPathsAlgorithm\nghidra.graph.algo.SorterException\nghidra.graph.algo.TarjanStronglyConnectedAlgorthm\nghidra.graph.BlockFlowGraphType\nghidra.graph.CallGraphType\nghidra.graph.CodeFlowGraphType\nghidra.graph.DataFlowGraphType\nghidra.graph.DefaultGEdge\nghidra.graph.event.VisualGraphChangeListener\nghidra.graph.featurette.VgSatelliteFeaturette\nghidra.graph.featurette.VisualGraphFeaturette\nghidra.graph.GDirectedGraph\nghidra.graph.GEdge\nghidra.graph.GEdgeWeightMetric\nghidra.graph.GImplicitDirectedGraph\nghidra.graph.GraphAlgorithms\nghidra.graph.GraphFactory\nghidra.graph.GraphPath\nghidra.graph.GraphPathSet\nghidra.graph.graphs.DefaultVisualGraph\nghidra.graph.graphs.FilteringVisualGraph\nghidra.graph.graphs.GroupingVisualGraph\nghidra.graph.graphs.JungDirectedVisualGraph\nghidra.graph.GVertex\nghidra.graph.GWeightedEdge\nghidra.graph.job.AbstractAnimator\nghidra.graph.job.AbstractAnimatorJob\nghidra.graph.job.AbstractGraphTransitionJob\nghidra.graph.job.AbstractGraphTransitionJob.ArticulationTransitionPoints\nghidra.graph.job.AbstractGraphTransitionJob.TransitionPoints\nghidra.graph.job.AbstractGraphVisibilityTransitionJob\nghidra.graph.job.EdgeHoverAnimator\nghidra.graph.job.EnsureAreaVisibleAnimatorFunctionGraphJob\nghidra.graph.job.FilterVerticesJob\nghidra.graph.job.FitGraphToViewJob\nghidra.graph.job.GraphJob\nghidra.graph.job.GraphJobListener\nghidra.graph.job.GraphJobRunner\nghidra.graph.job.MoveVertexToCenterAnimatorFunctionGraphJob\nghidra.graph.job.MoveVertexToCenterTopAnimatorFunctionGraphJob\nghidra.graph.job.MoveViewAnimatorFunctionGraphJob\nghidra.graph.job.MoveViewToLayoutSpacePointAnimatorFunctionGraphJob\nghidra.graph.job.MoveViewToViewSpacePointAnimatorFunctionGraphJob\nghidra.graph.job.RelayoutFunctionGraphJob\nghidra.graph.job.TwinkleVertexAnimator\nghidra.graph.jung.JungDirectedGraph\nghidra.graph.jung.JungToGDirectedGraphAdapter\nghidra.graph.MutableGDirectedGraphWrapper\nghidra.graph.MutableGDirectedGraphWrapper.DummyEdge\nghidra.graph.ProgramGraphDisplayOptions\nghidra.graph.ProgramGraphType\nghidra.graph.viewer.actions.VgActionContext\nghidra.graph.viewer.actions.VgSatelliteContext\nghidra.graph.viewer.actions.VgVertexContext\nghidra.graph.viewer.actions.VisualGraphActionContext\nghidra.graph.viewer.actions.VisualGraphContextMarker\nghidra.graph.viewer.actions.VisualGraphSatelliteActionContext\nghidra.graph.viewer.actions.VisualGraphVertexActionContext\nghidra.graph.viewer.edge.AbstractVisualEdge\nghidra.graph.viewer.edge.BasicEdgeLabelRenderer\nghidra.graph.viewer.edge.InitializeCircuitsRunnable\nghidra.graph.viewer.edge.PathHighlighterWorkPauser\nghidra.graph.viewer.edge.PathHighlightListener\nghidra.graph.viewer.edge.routing.BasicEdgeRouter\nghidra.graph.viewer.edge.VisualEdgeArrowRenderingSupport\nghidra.graph.viewer.edge.VisualEdgeRenderer\nghidra.graph.viewer.edge.VisualGraphEdgeSatelliteRenderer\nghidra.graph.viewer.edge.VisualGraphEdgeStrokeTransformer\nghidra.graph.viewer.edge.VisualGraphPathHighlighter\nghidra.graph.viewer.event.mouse.JungPickingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VertexMouseInfo\nghidra.graph.viewer.event.mouse.VertexTooltipProvider\nghidra.graph.viewer.event.mouse.VisualGraphAbstractGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphAnimatedPickingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphCursorRestoringGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphEdgeSelectionGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphEventForwardingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphHoverMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphMouseTrackingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphPickingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphPluggableGraphMouse\nghidra.graph.viewer.event.mouse.VisualGraphPopupMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphSatelliteAbstractGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphSatelliteGraphMouse\nghidra.graph.viewer.event.mouse.VisualGraphSatelliteNavigationGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphSatelliteScalingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphSatelliteTranslatingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphScalingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphScreenPositioningPlugin\nghidra.graph.viewer.event.mouse.VisualGraphScrollWheelPanningPlugin\nghidra.graph.viewer.event.mouse.VisualGraphTranslatingGraphMousePlugin\nghidra.graph.viewer.event.mouse.VisualGraphZoomingPickingGraphMousePlugin\nghidra.graph.viewer.event.picking.GPickedState\nghidra.graph.viewer.event.picking.PickListener\nghidra.graph.viewer.event.picking.PickListener.EventSource\nghidra.graph.viewer.GraphComponent\nghidra.graph.viewer.GraphPerspectiveInfo\nghidra.graph.viewer.GraphSatelliteListener\nghidra.graph.viewer.GraphViewer\nghidra.graph.viewer.GraphViewerUtils\nghidra.graph.viewer.layout.AbstractLayoutProvider\nghidra.graph.viewer.layout.AbstractVisualGraphLayout\nghidra.graph.viewer.layout.CalculateLayoutLocationsTask\nghidra.graph.viewer.layout.Column\nghidra.graph.viewer.layout.GridLocationMap\nghidra.graph.viewer.layout.JungLayout\nghidra.graph.viewer.layout.JungLayoutProvider\nghidra.graph.viewer.layout.JungLayoutProviderFactory\nghidra.graph.viewer.layout.JungWrappingVisualGraphLayoutAdapter\nghidra.graph.viewer.layout.LayoutListener\nghidra.graph.viewer.layout.LayoutListener.ChangeType\nghidra.graph.viewer.layout.LayoutLocationMap\nghidra.graph.viewer.layout.LayoutPositions\nghidra.graph.viewer.layout.LayoutProvider\nghidra.graph.viewer.layout.LayoutProviderExtensionPoint\nghidra.graph.viewer.layout.LayoutProviderExtensionPoint\nghidra.graph.viewer.layout.MinMaxRowColumn\nghidra.graph.viewer.layout.Row\nghidra.graph.viewer.layout.VisualGraphLayout\nghidra.graph.viewer.options.RelayoutOption\nghidra.graph.viewer.options.ViewRestoreOption\nghidra.graph.viewer.options.VisualGraphOptions\nghidra.graph.viewer.PathHighlightMode\nghidra.graph.viewer.popup.PopupRegulator\nghidra.graph.viewer.popup.PopupSource\nghidra.graph.viewer.popup.ToolTipInfo\nghidra.graph.viewer.renderer.ArticulatedEdgeRenderer\nghidra.graph.viewer.renderer.DebugShape\nghidra.graph.viewer.renderer.MouseClickedPaintableShape\nghidra.graph.viewer.renderer.MouseDebugPaintable\nghidra.graph.viewer.renderer.MouseDraggedLinePaintableShape\nghidra.graph.viewer.renderer.MouseDraggedPaintableShape\nghidra.graph.viewer.renderer.PaintableShape\nghidra.graph.viewer.renderer.VisualGraphEdgeLabelRenderer\nghidra.graph.viewer.renderer.VisualGraphRenderer\nghidra.graph.viewer.renderer.VisualVertexSatelliteRenderer\nghidra.graph.viewer.satellite.CachingSatelliteGraphViewer\nghidra.graph.viewer.SatelliteGraphViewer\nghidra.graph.viewer.shape.ArticulatedEdgeTransformer\nghidra.graph.viewer.shape.GraphLoopShape\nghidra.graph.viewer.shape.VisualGraphShapePickSupport\nghidra.graph.viewer.vertex.AbstractVisualVertex\nghidra.graph.viewer.vertex.AbstractVisualVertexRenderer\nghidra.graph.viewer.vertex.DockingVisualVertex\nghidra.graph.viewer.vertex.VertexClickListener\nghidra.graph.viewer.vertex.VertexFocusListener\nghidra.graph.viewer.vertex.VertexShapeProvider\nghidra.graph.viewer.vertex.VisualGraphVertexShapeTransformer\nghidra.graph.viewer.vertex.VisualVertexRenderer\nghidra.graph.viewer.VisualEdge\nghidra.graph.viewer.VisualGraphScalingControl\nghidra.graph.viewer.VisualGraphView\nghidra.graph.viewer.VisualGraphViewUpdater\nghidra.graph.viewer.VisualVertex\nghidra.graph.VisualGraph\nghidra.graph.VisualGraphComponentProvider\nghidra.JarRun\nghidra.MiscellaneousPluginPackage\nghidra.net.ApplicationKeyManagerFactory\nghidra.net.ApplicationKeyManagerUtils\nghidra.net.ApplicationSSLSocketFactory\nghidra.net.ApplicationTrustManagerFactory\nghidra.net.http.HttpUtil\nghidra.net.HttpClients\nghidra.net.SignedToken\nghidra.net.SSLContextInitializer\nghidra.net.SSLContextInitializer.HttpsHostnameVerifier\nghidra.pcode.emulate.BreakCallBack\nghidra.pcode.emulate.BreakTable\nghidra.pcode.emulate.BreakTableCallBack\nghidra.pcode.emulate.callother.CountLeadingOnesOpBehavior\nghidra.pcode.emulate.callother.CountLeadingZerosOpBehavior\nghidra.pcode.emulate.callother.OpBehaviorOther\nghidra.pcode.emulate.callother.OpBehaviorOtherNOP\nghidra.pcode.emulate.Emulate\nghidra.pcode.emulate.EmulateDisassemblerContext\nghidra.pcode.emulate.EmulateExecutionState\nghidra.pcode.emulate.EmulateInstructionStateModifier\nghidra.pcode.emulate.EmulateMemoryStateBuffer\nghidra.pcode.emulate.InstructionDecodeException\nghidra.pcode.emulate.UnimplementedCallOtherException\nghidra.pcode.emulate.UnimplementedInstructionException\nghidra.pcode.error.LowlevelError\nghidra.pcode.floatformat.BigFloat\nghidra.pcode.floatformat.FloatFormat\nghidra.pcode.floatformat.FloatFormatFactory\nghidra.pcode.floatformat.UnsupportedFloatFormatException\nghidra.pcode.loadimage.LoadImage\nghidra.pcode.loadimage.LoadImageFunc\nghidra.pcode.memstate.MemoryBank\nghidra.pcode.memstate.MemoryFaultHandler\nghidra.pcode.memstate.MemoryPage\nghidra.pcode.memstate.MemoryPageBank\nghidra.pcode.memstate.MemoryPageOverlay\nghidra.pcode.memstate.MemoryState\nghidra.pcode.memstate.UniqueMemoryBank\nghidra.pcode.memstate.UniqueMemoryBank.WordInfo\nghidra.pcode.opbehavior.BinaryOpBehavior\nghidra.pcode.opbehavior.OpBehavior\nghidra.pcode.opbehavior.OpBehaviorBoolAnd\nghidra.pcode.opbehavior.OpBehaviorBoolNegate\nghidra.pcode.opbehavior.OpBehaviorBoolOr\nghidra.pcode.opbehavior.OpBehaviorBoolXor\nghidra.pcode.opbehavior.OpBehaviorCopy\nghidra.pcode.opbehavior.OpBehaviorEqual\nghidra.pcode.opbehavior.OpBehaviorFactory\nghidra.pcode.opbehavior.OpBehaviorFloatAbs\nghidra.pcode.opbehavior.OpBehaviorFloatAdd\nghidra.pcode.opbehavior.OpBehaviorFloatCeil\nghidra.pcode.opbehavior.OpBehaviorFloatDiv\nghidra.pcode.opbehavior.OpBehaviorFloatEqual\nghidra.pcode.opbehavior.OpBehaviorFloatFloat2Float\nghidra.pcode.opbehavior.OpBehaviorFloatFloor\nghidra.pcode.opbehavior.OpBehaviorFloatInt2Float\nghidra.pcode.opbehavior.OpBehaviorFloatLess\nghidra.pcode.opbehavior.OpBehaviorFloatLessEqual\nghidra.pcode.opbehavior.OpBehaviorFloatMult\nghidra.pcode.opbehavior.OpBehaviorFloatNan\nghidra.pcode.opbehavior.OpBehaviorFloatNeg\nghidra.pcode.opbehavior.OpBehaviorFloatNotEqual\nghidra.pcode.opbehavior.OpBehaviorFloatRound\nghidra.pcode.opbehavior.OpBehaviorFloatSqrt\nghidra.pcode.opbehavior.OpBehaviorFloatSub\nghidra.pcode.opbehavior.OpBehaviorFloatTrunc\nghidra.pcode.opbehavior.OpBehaviorInt2Comp\nghidra.pcode.opbehavior.OpBehaviorIntAdd\nghidra.pcode.opbehavior.OpBehaviorIntAnd\nghidra.pcode.opbehavior.OpBehaviorIntCarry\nghidra.pcode.opbehavior.OpBehaviorIntDiv\nghidra.pcode.opbehavior.OpBehaviorIntLeft\nghidra.pcode.opbehavior.OpBehaviorIntLess\nghidra.pcode.opbehavior.OpBehaviorIntLessEqual\nghidra.pcode.opbehavior.OpBehaviorIntMult\nghidra.pcode.opbehavior.OpBehaviorIntNegate\nghidra.pcode.opbehavior.OpBehaviorIntOr\nghidra.pcode.opbehavior.OpBehaviorIntRem\nghidra.pcode.opbehavior.OpBehaviorIntRight\nghidra.pcode.opbehavior.OpBehaviorIntSborrow\nghidra.pcode.opbehavior.OpBehaviorIntScarry\nghidra.pcode.opbehavior.OpBehaviorIntSdiv\nghidra.pcode.opbehavior.OpBehaviorIntSext\nghidra.pcode.opbehavior.OpBehaviorIntSless\nghidra.pcode.opbehavior.OpBehaviorIntSlessEqual\nghidra.pcode.opbehavior.OpBehaviorIntSrem\nghidra.pcode.opbehavior.OpBehaviorIntSright\nghidra.pcode.opbehavior.OpBehaviorIntSub\nghidra.pcode.opbehavior.OpBehaviorIntXor\nghidra.pcode.opbehavior.OpBehaviorIntZext\nghidra.pcode.opbehavior.OpBehaviorNotEqual\nghidra.pcode.opbehavior.OpBehaviorPiece\nghidra.pcode.opbehavior.OpBehaviorPopcount\nghidra.pcode.opbehavior.OpBehaviorSubpiece\nghidra.pcode.opbehavior.SpecialOpBehavior\nghidra.pcode.opbehavior.UnaryOpBehavior\nghidra.pcode.pcoderaw.PcodeOpRaw\nghidra.pcode.utils.AddressUtils\nghidra.pcode.utils.MessageFormattingUtils\nghidra.pcode.utils.Utils\nghidra.plugin.importer.AddToProgramDialog\nghidra.plugin.importer.ImporterDialog\nghidra.plugin.importer.ImporterLanguageDialog\nghidra.plugin.importer.ImporterPlugin\nghidra.plugin.importer.ImporterUtilities\nghidra.plugin.importer.LanguageSortedTableModel\nghidra.plugin.importer.LcsSelectionEvent\nghidra.plugin.importer.LcsSelectionListener\nghidra.plugin.importer.NewLanguagePanel\nghidra.plugin.importer.ProgramMappingService\nghidra.plugins.fsbrowser.FileIconService\nghidra.plugins.fsbrowser.FileSystemBrowserPlugin\nghidra.plugins.fsbrowser.FSBAction\nghidra.plugins.fsbrowser.FSBActionContext\nghidra.plugins.fsbrowser.FSBDirNode\nghidra.plugins.fsbrowser.FSBFileNode\nghidra.plugins.fsbrowser.FSBNode\nghidra.plugins.fsbrowser.FSBRootNode\nghidra.plugins.fsbrowser.FSBUtils\nghidra.plugins.fsbrowser.ImageManager\nghidra.plugins.fsbrowser.tasks.GFileSystemExtractAllTask\nghidra.plugins.fsbrowser.tasks.GFileSystemLoadKernelTask\nghidra.plugins.importer.batch.BatchGroup\nghidra.plugins.importer.batch.BatchGroup.BatchLoadConfig\nghidra.plugins.importer.batch.BatchGroupLoadSpec\nghidra.plugins.importer.batch.BatchImportDialog\nghidra.plugins.importer.batch.BatchInfo\nghidra.plugins.importer.batch.BatchSegregatingCriteria\nghidra.plugins.importer.batch.UserAddedSourceInfo\nghidra.plugins.importer.tasks.ImportBatchTask\nghidra.program.database.bookmark.BookmarkDB\nghidra.program.database.bookmark.BookmarkDBAdapterV3\nghidra.program.database.bookmark.BookmarkDBManager\nghidra.program.database.bookmark.BookmarkTypeDB\nghidra.program.database.bookmark.BookmarkTypeDBAdapterNoTable\nghidra.program.database.bookmark.BookmarkTypeDBAdapterV0\nghidra.program.database.bookmark.OldBookmark\nghidra.program.database.code.CodeManager\nghidra.program.database.code.CodeUnitKeyIterator\nghidra.program.database.code.CommentTypeFilterAddressIterator\nghidra.program.database.code.CommentTypeFilterIterator\nghidra.program.database.code.DataFilteredCodeUnitIterator\nghidra.program.database.code.DataKeyIterator\nghidra.program.database.code.DataRecordIterator\nghidra.program.database.code.EmptyCodeUnitIterator\nghidra.program.database.code.InstructionDB\nghidra.program.database.code.InstructionRecordIterator\nghidra.program.database.code.StringDiff\nghidra.program.database.data.BuiltinDBAdapter\nghidra.program.database.data.DataTypeArchiveTransformer\nghidra.program.database.data.DataTypeArchiveTransformerPanel\nghidra.program.database.data.DataTypeIDConverter\nghidra.program.database.data.DataTypeManagerDB\nghidra.program.database.data.DataTypeUtilities\nghidra.program.database.data.LazyLoadingCachingMap\nghidra.program.database.data.ProgramDataTypeManager\nghidra.program.database.data.ProjectDataTypeManager\nghidra.program.database.data.SourceArchiveDB\nghidra.program.database.data.SourceArchiveUpgradeMap\nghidra.program.database.DatabaseObject\nghidra.program.database.DataTypeArchiveContentHandler\nghidra.program.database.DataTypeArchiveDB\nghidra.program.database.DataTypeArchiveMergeManagerFactory\nghidra.program.database.DBObjectCache\nghidra.program.database.external.ExternalLocationDB\nghidra.program.database.external.ExternalManagerDB\nghidra.program.database.function.FunctionDB\nghidra.program.database.function.FunctionManagerDB\nghidra.program.database.function.FunctionTagDB\nghidra.program.database.function.FunctionTagManagerDB\nghidra.program.database.function.LocalVariableDB\nghidra.program.database.function.OverlappingFunctionException\nghidra.program.database.function.ReturnParameterDB\nghidra.program.database.function.ThunkFunctionAdapterV0\nghidra.program.database.function.VariableDB\nghidra.program.database.GhidraDataTypeArchiveMergeManagerFactory\nghidra.program.database.GhidraProgramMultiUserMergeManagerFactory\nghidra.program.database.IntRangeMap\nghidra.program.database.IntRangeMapDB\nghidra.program.database.ManagerDB\nghidra.program.database.map.AddressIndexKeyIterator\nghidra.program.database.map.AddressIndexPrimaryKeyIterator\nghidra.program.database.map.AddressKeyAddressIterator\nghidra.program.database.map.AddressKeyIterator\nghidra.program.database.map.AddressKeyRecordIterator\nghidra.program.database.map.AddressMap\nghidra.program.database.map.AddressMapDB\nghidra.program.database.map.AddressRecordDeleter\nghidra.program.database.map.NormalizedAddressSet\nghidra.program.database.mem.AddressSourceInfo\nghidra.program.database.mem.ByteMappingScheme\nghidra.program.database.mem.FileBytes\nghidra.program.database.mem.MemoryBlockDB\nghidra.program.database.mem.MemoryMapDB\nghidra.program.database.mem.MemoryMapDBAdapterV3\nghidra.program.database.module.TreeManager\nghidra.program.database.ObsoleteProgramPropertiesService\nghidra.program.database.oldfunction.OldFunctionManager\nghidra.program.database.ProgramAddressFactory\nghidra.program.database.ProgramBuilder\nghidra.program.database.ProgramCompilerSpec\nghidra.program.database.ProgramContentHandler\nghidra.program.database.ProgramDB\nghidra.program.database.ProgramMultiUserMergeManagerFactory\nghidra.program.database.properties.DBPropertyMapManager\nghidra.program.database.properties.GenericSaveable\nghidra.program.database.properties.IntPropertyMapDB\nghidra.program.database.properties.LongPropertyMapDB\nghidra.program.database.properties.ObjectPropertyMapDB\nghidra.program.database.properties.PropertyMapDB\nghidra.program.database.properties.StringPropertyMapDB\nghidra.program.database.properties.UnsupportedMapDB\nghidra.program.database.properties.VoidPropertyMapDB\nghidra.program.database.references.ReferenceDBManager\nghidra.program.database.register.AddressRangeObjectMap\nghidra.program.database.register.DatabaseRangeMapAdapter\nghidra.program.database.register.IndexToAddressRangeIteratorAdapter\nghidra.program.database.register.InMemoryRangeMapAdapter\nghidra.program.database.register.OldProgramContextDB\nghidra.program.database.register.ProgramRegisterContextDB\nghidra.program.database.reloc.RelocationDBAdapterV4\nghidra.program.database.reloc.RelocationManager\nghidra.program.database.SpecExtension\nghidra.program.database.SpecExtension.DocInfo\nghidra.program.database.SpecExtension.Type\nghidra.program.database.symbol.ClassSymbol\nghidra.program.database.symbol.CodeSymbol\nghidra.program.database.symbol.EquateDB\nghidra.program.database.symbol.EquateManager\nghidra.program.database.symbol.FunctionSymbol\nghidra.program.database.symbol.GlobalRegisterSymbol\nghidra.program.database.symbol.GlobalVariableSymbolDB\nghidra.program.database.symbol.LibrarySymbol\nghidra.program.database.symbol.NamespaceManager\nghidra.program.database.symbol.NamespaceSymbol\nghidra.program.database.symbol.OldVariableStorageManagerDB\nghidra.program.database.symbol.OverlappingNamespaceException\nghidra.program.database.symbol.SymbolDB\nghidra.program.database.symbol.SymbolManager\nghidra.program.database.symbol.TypeFilteredSymbolIterator\nghidra.program.database.symbol.VariableStorageDBAdapterNoTable\nghidra.program.database.symbol.VariableStorageDBAdapterV2\nghidra.program.database.symbol.VariableStorageManagerDB\nghidra.program.database.symbol.VariableSymbolDB\nghidra.program.database.util.AddressRangeMapDB\nghidra.program.database.util.AddressSetPropertyMapDB\nghidra.program.database.util.AndQuery\nghidra.program.database.util.DatabaseTableUtils\nghidra.program.database.util.DatabaseVersionException\nghidra.program.database.util.DBFieldAdapter\nghidra.program.database.util.DBKeyAdapter\nghidra.program.database.util.DBRecordAdapter\nghidra.program.database.util.EmptyRecordIterator\nghidra.program.database.util.FieldMatchQuery\nghidra.program.database.util.FieldRangeQuery\nghidra.program.database.util.IndexedAddressIterator\nghidra.program.database.util.NotQuery\nghidra.program.database.util.OrQuery\nghidra.program.database.util.ProgramTransaction\nghidra.program.database.util.Query\nghidra.program.database.util.QueryRecordIterator\nghidra.program.database.util.RecordFilter\nghidra.program.database.util.SharedRangeMapDB\nghidra.program.database.util.StringMatchQuery\nghidra.program.database.util.SynchronizedAddressSetCollection\nghidra.program.disassemble.Disassembler\nghidra.program.disassemble.Disassembler.DisassemblerProgramContext\nghidra.program.disassemble.DisassemblerConflictHandler\nghidra.program.disassemble.DisassemblerContextImpl\nghidra.program.disassemble.DisassemblerMessageListener\nghidra.program.examiner.ProgramExaminer\nghidra.program.flatapi.FlatProgramAPI\nghidra.program.model.address.Address\nghidra.program.model.address.AddressFactory\nghidra.program.model.address.AddressFormatException\nghidra.program.model.address.AddressIterator\nghidra.program.model.address.AddressIterator\nghidra.program.model.address.AddressIteratorAdapter\nghidra.program.model.address.AddressMapImpl\nghidra.program.model.address.AddressObjectMap\nghidra.program.model.address.AddressOutOfBoundsException\nghidra.program.model.address.AddressOverflowException\nghidra.program.model.address.AddressRange\nghidra.program.model.address.AddressRange\nghidra.program.model.address.AddressRangeChunker\nghidra.program.model.address.AddressRangeImpl\nghidra.program.model.address.AddressRangeIterator\nghidra.program.model.address.AddressRangeIterator\nghidra.program.model.address.AddressRangeToAddressComparator\nghidra.program.model.address.AddressSet\nghidra.program.model.address.AddressSetCollection\nghidra.program.model.address.AddressSetMapping\nghidra.program.model.address.AddressSetView\nghidra.program.model.address.AddressSetViewAdapter\nghidra.program.model.address.AddressSpace\nghidra.program.model.address.DefaultAddressFactory\nghidra.program.model.address.EmptyAddressIterator\nghidra.program.model.address.EmptyAddressRangeIterator\nghidra.program.model.address.GenericAddress\nghidra.program.model.address.GenericAddressSpace\nghidra.program.model.address.GlobalNamespace\nghidra.program.model.address.GlobalSymbol\nghidra.program.model.address.KeyRange\nghidra.program.model.address.OldGenericNamespaceAddress\nghidra.program.model.address.OverlayAddressSpace\nghidra.program.model.address.ProtectedAddressSpace\nghidra.program.model.address.SegmentedAddress\nghidra.program.model.address.SegmentedAddressSpace\nghidra.program.model.address.SegmentMismatchException\nghidra.program.model.address.SingleAddressSetCollection\nghidra.program.model.address.SpecialAddress\nghidra.program.model.address.UniqueAddressFactory\nghidra.program.model.block.BasicBlockModel\nghidra.program.model.block.CodeBlock\nghidra.program.model.block.CodeBlockImpl\nghidra.program.model.block.CodeBlockIterator\nghidra.program.model.block.CodeBlockModel\nghidra.program.model.block.CodeBlockReference\nghidra.program.model.block.CodeBlockReferenceImpl\nghidra.program.model.block.CodeBlockReferenceIterator\nghidra.program.model.block.ExtCodeBlockImpl\nghidra.program.model.block.FollowFlow\nghidra.program.model.block.graph.CodeBlockEdge\nghidra.program.model.block.graph.CodeBlockVertex\nghidra.program.model.block.IsolatedEntrySubModel\nghidra.program.model.block.MultEntSubModel\nghidra.program.model.block.OverlapCodeSubModel\nghidra.program.model.block.PartitionCodeSubModel\nghidra.program.model.block.SimpleBlockIterator\nghidra.program.model.block.SimpleBlockModel\nghidra.program.model.block.SimpleDestReferenceIterator\nghidra.program.model.block.SimpleSourceReferenceIterator\nghidra.program.model.block.SingleEntSubIterator\nghidra.program.model.block.SubroutineBlockModel\nghidra.program.model.block.SubroutineDestReferenceIterator\nghidra.program.model.block.SubroutineSourceReferenceIterator\nghidra.program.model.correlate.AllBytesHashCalculator\nghidra.program.model.correlate.Block\nghidra.program.model.correlate.DisambiguateByBytes\nghidra.program.model.correlate.DisambiguateByChild\nghidra.program.model.correlate.DisambiguateByParent\nghidra.program.model.correlate.DisambiguateByParentWithOrder\nghidra.program.model.correlate.DisambiguateStrategy\nghidra.program.model.correlate.Hash\nghidra.program.model.correlate.HashCalculator\nghidra.program.model.correlate.HashedFunctionAddressCorrelation\nghidra.program.model.correlate.HashEntry\nghidra.program.model.correlate.HashStore\nghidra.program.model.correlate.HashStore.NgramMatch\nghidra.program.model.correlate.InstructHash\nghidra.program.model.correlate.MnemonicHashCalculator\nghidra.program.model.data.AbstractComplexDataType\nghidra.program.model.data.AbstractDataType\nghidra.program.model.data.AbstractFloatDataType\nghidra.program.model.data.AbstractIntegerDataType\nghidra.program.model.data.AbstractStringDataType\nghidra.program.model.data.AIFFDataType\nghidra.program.model.data.AlignedStructureInspector\nghidra.program.model.data.AlignedStructurePacker\nghidra.program.model.data.AlignedStructurePacker.StructurePackResult\nghidra.program.model.data.AlignmentDataType\nghidra.program.model.data.AlignmentType\nghidra.program.model.data.AnnotationHandler\nghidra.program.model.data.ArchiveType\nghidra.program.model.data.Array\nghidra.program.model.data.ArrayDataType\nghidra.program.model.data.ArrayStringable\nghidra.program.model.data.AUDataType\nghidra.program.model.data.BadDataType\nghidra.program.model.data.BitFieldDataType\nghidra.program.model.data.BitFieldPacking\nghidra.program.model.data.BitFieldPackingImpl\nghidra.program.model.data.BitGroup\nghidra.program.model.data.BitmapResource\nghidra.program.model.data.BitmapResourceDataType\nghidra.program.model.data.BooleanDataType\nghidra.program.model.data.BuiltIn\nghidra.program.model.data.BuiltInDataType\nghidra.program.model.data.BuiltInDataType\nghidra.program.model.data.BuiltInDataTypeClassExclusionFilter\nghidra.program.model.data.BuiltInDataTypeManager\nghidra.program.model.data.ByteDataType\nghidra.program.model.data.Category\nghidra.program.model.data.CategoryPath\nghidra.program.model.data.CharDataType\nghidra.program.model.data.CharsetInfo\nghidra.program.model.data.CharsetSettingsDefinition\nghidra.program.model.data.Complex8DataType\nghidra.program.model.data.Complex16DataType\nghidra.program.model.data.Complex32DataType\nghidra.program.model.data.Composite\nghidra.program.model.data.CompositeAlignmentHelper\nghidra.program.model.data.CompositeDataTypeImpl\nghidra.program.model.data.CompositeInternal\nghidra.program.model.data.CompositeInternal.ComponentComparator\nghidra.program.model.data.CompositeInternal.OffsetComparator\nghidra.program.model.data.CompositeInternal.OrdinalComparator\nghidra.program.model.data.CountedDynamicDataType\nghidra.program.model.data.CustomFormat\nghidra.program.model.data.CycleGroup\nghidra.program.model.data.DataImage\nghidra.program.model.data.DataOrganization\nghidra.program.model.data.DataOrganizationImpl\nghidra.program.model.data.DataType\nghidra.program.model.data.DataTypeArchiveIdDumper\nghidra.program.model.data.DataTypeComparator\nghidra.program.model.data.DataTypeComponent\nghidra.program.model.data.DataTypeComponentImpl\nghidra.program.model.data.DataTypeConflictException\nghidra.program.model.data.DataTypeConflictHandler\nghidra.program.model.data.DataTypeConflictHandler.ConflictResolutionPolicy\nghidra.program.model.data.DataTypeConflictHandler.ConflictResult\nghidra.program.model.data.DataTypeDependencyException\nghidra.program.model.data.DataTypeDisplayOptions\nghidra.program.model.data.DataTypeEncodeException\nghidra.program.model.data.DataTypeImpl\nghidra.program.model.data.DataTypeInstance\nghidra.program.model.data.DataTypeManager\nghidra.program.model.data.DataTypeManagerChangeListener\nghidra.program.model.data.DataTypeManagerChangeListenerAdapter\nghidra.program.model.data.DataTypeManagerChangeListenerHandler\nghidra.program.model.data.DataTypeManagerDomainObject\nghidra.program.model.data.DataTypeManagerDomainObject\nghidra.program.model.data.DataTypeManagerDomainObject\nghidra.program.model.data.DataTypeMnemonicSettingsDefinition\nghidra.program.model.data.DataTypePath\nghidra.program.model.data.DataTypeTransferable\nghidra.program.model.data.DataTypeWithCharset\nghidra.program.model.data.DataTypeWriter\nghidra.program.model.data.DataUtilities\nghidra.program.model.data.DataUtilities.ClearDataMode\nghidra.program.model.data.DefaultAnnotationHandler\nghidra.program.model.data.DefaultDataType\nghidra.program.model.data.DialogResourceDataType\nghidra.program.model.data.DomainFileBasedDataTypeManager\nghidra.program.model.data.DoubleComplexDataType\nghidra.program.model.data.DoubleDataType\nghidra.program.model.data.DWordDataType\nghidra.program.model.data.Dynamic\nghidra.program.model.data.Dynamic\nghidra.program.model.data.DynamicDataType\nghidra.program.model.data.EndianSettingsDefinition\nghidra.program.model.data.Enum\nghidra.program.model.data.EnumDataType\nghidra.program.model.data.EnumValuePartitioner\nghidra.program.model.data.FactoryDataType\nghidra.program.model.data.FactoryDataType\nghidra.program.model.data.FactoryStructureDataType\nghidra.program.model.data.FileArchiveBasedDataTypeManager\nghidra.program.model.data.FileBasedDataTypeManager\nghidra.program.model.data.FileDataTypeManager\nghidra.program.model.data.FileTimeDataType\nghidra.program.model.data.Float2DataType\nghidra.program.model.data.Float4DataType\nghidra.program.model.data.Float8DataType\nghidra.program.model.data.Float10DataType\nghidra.program.model.data.Float16DataType\nghidra.program.model.data.FloatComplexDataType\nghidra.program.model.data.FloatDataType\nghidra.program.model.data.FunctionDefinition\nghidra.program.model.data.FunctionDefinition\nghidra.program.model.data.FunctionDefinitionDataType\nghidra.program.model.data.GenericCallingConvention\nghidra.program.model.data.GenericDataType\nghidra.program.model.data.GifDataType\nghidra.program.model.data.GIFResource\nghidra.program.model.data.ICategory\nghidra.program.model.data.IconMaskResourceDataType\nghidra.program.model.data.IconResource\nghidra.program.model.data.IconResourceDataType\nghidra.program.model.data.IllegalRenameException\nghidra.program.model.data.ImageBaseOffset32DataType\nghidra.program.model.data.ImageBaseOffset64DataType\nghidra.program.model.data.IndexedDynamicDataType\nghidra.program.model.data.Integer3DataType\nghidra.program.model.data.Integer5DataType\nghidra.program.model.data.Integer6DataType\nghidra.program.model.data.Integer7DataType\nghidra.program.model.data.Integer16DataType\nghidra.program.model.data.IntegerDataType\nghidra.program.model.data.InternalDataTypeComponent\nghidra.program.model.data.InvalidatedListener\nghidra.program.model.data.InvalidDataTypeException\nghidra.program.model.data.JPEGDataType\nghidra.program.model.data.LongDataType\nghidra.program.model.data.LongDoubleComplexDataType\nghidra.program.model.data.LongDoubleDataType\nghidra.program.model.data.LongLongDataType\nghidra.program.model.data.MacintoshTimeStampDataType\nghidra.program.model.data.MemBufferImageInputStream\nghidra.program.model.data.MenuResourceDataType\nghidra.program.model.data.MetaDataType\nghidra.program.model.data.MissingBuiltInDataType\nghidra.program.model.data.MutabilitySettingsDefinition\nghidra.program.model.data.NoisyStructureBuilder\nghidra.program.model.data.PackingType\nghidra.program.model.data.PaddingSettingsDefinition\nghidra.program.model.data.ParameterDefinition\nghidra.program.model.data.ParameterDefinitionImpl\nghidra.program.model.data.PascalString255DataType\nghidra.program.model.data.PascalStringDataType\nghidra.program.model.data.PascalUnicodeDataType\nghidra.program.model.data.Playable\nghidra.program.model.data.PngDataType\nghidra.program.model.data.Pointer\nghidra.program.model.data.Pointer8DataType\nghidra.program.model.data.Pointer16DataType\nghidra.program.model.data.Pointer24DataType\nghidra.program.model.data.Pointer32DataType\nghidra.program.model.data.Pointer40DataType\nghidra.program.model.data.Pointer48DataType\nghidra.program.model.data.Pointer56DataType\nghidra.program.model.data.Pointer64DataType\nghidra.program.model.data.PointerDataType\nghidra.program.model.data.ProgramBasedDataTypeManager\nghidra.program.model.data.ProjectArchiveBasedDataTypeManager\nghidra.program.model.data.QWordDataType\nghidra.program.model.data.ReadOnlyDataTypeComponent\nghidra.program.model.data.RenderUnicodeSettingsDefinition\nghidra.program.model.data.RenderUnicodeSettingsDefinition.RENDER_ENUM\nghidra.program.model.data.RepeatCountDataType\nghidra.program.model.data.RepeatedDynamicDataType\nghidra.program.model.data.RepeatedStringDataType\nghidra.program.model.data.Resource\nghidra.program.model.data.SegmentedCodePointerDataType\nghidra.program.model.data.ShiftedAddressDataType\nghidra.program.model.data.ShortDataType\nghidra.program.model.data.SignedByteDataType\nghidra.program.model.data.SignedCharDataType\nghidra.program.model.data.SignedDWordDataType\nghidra.program.model.data.SignedQWordDataType\nghidra.program.model.data.SignedWordDataType\nghidra.program.model.data.SourceArchive\nghidra.program.model.data.StandAloneDataTypeManager\nghidra.program.model.data.StringDataInstance\nghidra.program.model.data.StringDataInstance.StaticStringInstance\nghidra.program.model.data.StringDataType\nghidra.program.model.data.StringLayoutEnum\nghidra.program.model.data.StringRenderBuilder\nghidra.program.model.data.StringRenderParser\nghidra.program.model.data.StringRenderParser.StringParseException\nghidra.program.model.data.StringUTF8DataType\nghidra.program.model.data.Structure\nghidra.program.model.data.Structure.BitOffsetComparator\nghidra.program.model.data.StructureDataType\nghidra.program.model.data.StructuredDynamicDataType\nghidra.program.model.data.StructureFactory\nghidra.program.model.data.StructureInternal\nghidra.program.model.data.StructureInternal\nghidra.program.model.data.TerminatedSettingsDefinition\nghidra.program.model.data.TerminatedStringDataType\nghidra.program.model.data.TerminatedUnicode32DataType\nghidra.program.model.data.TerminatedUnicodeDataType\nghidra.program.model.data.TranslationSettingsDefinition\nghidra.program.model.data.TranslationSettingsDefinition.TRANSLATION_ENUM\nghidra.program.model.data.TypeDef\nghidra.program.model.data.TypedefDataType\nghidra.program.model.data.Undefined\nghidra.program.model.data.Undefined1DataType\nghidra.program.model.data.Undefined2DataType\nghidra.program.model.data.Undefined3DataType\nghidra.program.model.data.Undefined4DataType\nghidra.program.model.data.Undefined5DataType\nghidra.program.model.data.Undefined6DataType\nghidra.program.model.data.Undefined7DataType\nghidra.program.model.data.Undefined8DataType\nghidra.program.model.data.Unicode32DataType\nghidra.program.model.data.UnicodeDataType\nghidra.program.model.data.Union\nghidra.program.model.data.UnionDataType\nghidra.program.model.data.UnionInternal\nghidra.program.model.data.UnionInternal\nghidra.program.model.data.UnsignedCharDataType\nghidra.program.model.data.UnsignedInteger3DataType\nghidra.program.model.data.UnsignedInteger5DataType\nghidra.program.model.data.UnsignedInteger6DataType\nghidra.program.model.data.UnsignedInteger7DataType\nghidra.program.model.data.UnsignedInteger16DataType\nghidra.program.model.data.UnsignedIntegerDataType\nghidra.program.model.data.UnsignedLongDataType\nghidra.program.model.data.UnsignedLongLongDataType\nghidra.program.model.data.UnsignedShortDataType\nghidra.program.model.data.VoidDataType\nghidra.program.model.data.WAVEDataType\nghidra.program.model.data.WideChar16DataType\nghidra.program.model.data.WideChar32DataType\nghidra.program.model.data.WideCharDataType\nghidra.program.model.data.WordDataType\nghidra.program.model.lang.BasicCompilerSpec\nghidra.program.model.lang.BasicCompilerSpecDescription\nghidra.program.model.lang.BasicLanguageDescription\nghidra.program.model.lang.CompilerSpec\nghidra.program.model.lang.CompilerSpec.EvaluationModelType\nghidra.program.model.lang.CompilerSpecDescription\nghidra.program.model.lang.CompilerSpecID\nghidra.program.model.lang.CompilerSpecNotFoundException\nghidra.program.model.lang.ConstantPool\nghidra.program.model.lang.ConstantPool.Record\nghidra.program.model.lang.ContextSetting\nghidra.program.model.lang.DataTypeProviderContext\nghidra.program.model.lang.DecompilerLanguage\nghidra.program.model.lang.DisassemblerContext\nghidra.program.model.lang.DynamicVariableStorage\nghidra.program.model.lang.Endian\nghidra.program.model.lang.ExternalLanguageCompilerSpecQuery\nghidra.program.model.lang.GhidraLanguagePropertyKeys\nghidra.program.model.lang.IncompatibleMaskException\nghidra.program.model.lang.InjectContext\nghidra.program.model.lang.InjectPayload\nghidra.program.model.lang.InjectPayload.InjectParameter\nghidra.program.model.lang.InjectPayloadCallfixup\nghidra.program.model.lang.InjectPayloadCallfixupError\nghidra.program.model.lang.InjectPayloadCallother\nghidra.program.model.lang.InjectPayloadCallotherError\nghidra.program.model.lang.InjectPayloadJumpAssist\nghidra.program.model.lang.InjectPayloadSegment\nghidra.program.model.lang.InjectPayloadSleigh\nghidra.program.model.lang.InputListType\nghidra.program.model.lang.InstructionBlock\nghidra.program.model.lang.InstructionBlockFlow\nghidra.program.model.lang.InstructionBlockFlow.Type\nghidra.program.model.lang.InstructionContext\nghidra.program.model.lang.InstructionError\nghidra.program.model.lang.InstructionError.InstructionErrorType\nghidra.program.model.lang.InstructionPrototype\nghidra.program.model.lang.InstructionSet\nghidra.program.model.lang.InsufficientBytesException\nghidra.program.model.lang.InvalidPrototype\nghidra.program.model.lang.Language\nghidra.program.model.lang.LanguageCompilerSpecPair\nghidra.program.model.lang.LanguageCompilerSpecQuery\nghidra.program.model.lang.LanguageDescription\nghidra.program.model.lang.LanguageID\nghidra.program.model.lang.LanguageNotFoundException\nghidra.program.model.lang.LanguageProvider\nghidra.program.model.lang.LanguageService\nghidra.program.model.lang.Mask\nghidra.program.model.lang.MaskImpl\nghidra.program.model.lang.NestedDelaySlotException\nghidra.program.model.lang.OldLanguageMappingService\nghidra.program.model.lang.OperandType\nghidra.program.model.lang.PackedBytes\nghidra.program.model.lang.ParallelInstructionLanguageHelper\nghidra.program.model.lang.ParamEntry\nghidra.program.model.lang.ParamList\nghidra.program.model.lang.ParamList.WithSlotRec\nghidra.program.model.lang.ParamListRegisterOut\nghidra.program.model.lang.ParamListStandard\nghidra.program.model.lang.ParamListStandardOut\nghidra.program.model.lang.ParserContext\nghidra.program.model.lang.PcodeInjectLibrary\nghidra.program.model.lang.Processor\nghidra.program.model.lang.ProcessorContext\nghidra.program.model.lang.ProcessorContextImpl\nghidra.program.model.lang.ProcessorContextView\nghidra.program.model.lang.ProcessorNotFoundException\nghidra.program.model.lang.ProgramProcessorContext\nghidra.program.model.lang.PrototypeModel\nghidra.program.model.lang.PrototypeModelError\nghidra.program.model.lang.PrototypeModelMerged\nghidra.program.model.lang.ReadOnlyProcessorContext\nghidra.program.model.lang.Register\nghidra.program.model.lang.RegisterBuilder\nghidra.program.model.lang.RegisterManager\nghidra.program.model.lang.RegisterTranslator\nghidra.program.model.lang.RegisterTree\nghidra.program.model.lang.RegisterValue\nghidra.program.model.lang.SleighLanguageDescription\nghidra.program.model.lang.UndefinedValueException\nghidra.program.model.lang.UnknownContextException\nghidra.program.model.lang.UnknownDataException\nghidra.program.model.lang.UnknownInstructionException\nghidra.program.model.lang.UnknownRegister\nghidra.program.model.lang.VersionedLanguageService\nghidra.program.model.listing.AddressChangeSet\nghidra.program.model.listing.AutoParameterImpl\nghidra.program.model.listing.AutoParameterType\nghidra.program.model.listing.Bookmark\nghidra.program.model.listing.BookmarkComparator\nghidra.program.model.listing.BookmarkManager\nghidra.program.model.listing.BookmarkType\nghidra.program.model.listing.BookmarkTypeComparator\nghidra.program.model.listing.CircularDependencyException\nghidra.program.model.listing.CodeUnit\nghidra.program.model.listing.CodeUnitFormat\nghidra.program.model.listing.CodeUnitFormatOptions\nghidra.program.model.listing.CodeUnitFormatOptions.ShowBlockName\nghidra.program.model.listing.CodeUnitFormatOptions.ShowNamespace\nghidra.program.model.listing.CodeUnitIterator\nghidra.program.model.listing.CodeUnitIterator\nghidra.program.model.listing.CommentHistory\nghidra.program.model.listing.ContextChangeException\nghidra.program.model.listing.Data\nghidra.program.model.listing.Data\nghidra.program.model.listing.DataBuffer\nghidra.program.model.listing.DataIterator\nghidra.program.model.listing.DataIterator\nghidra.program.model.listing.DataIterator.IteratorWrapper\nghidra.program.model.listing.DataStub\nghidra.program.model.listing.DataTypeArchive\nghidra.program.model.listing.DataTypeArchive\nghidra.program.model.listing.DataTypeArchive\nghidra.program.model.listing.DataTypeArchiveChangeSet\nghidra.program.model.listing.DataTypeArchiveChangeSet\nghidra.program.model.listing.DataTypeChangeSet\nghidra.program.model.listing.DefaultProgramContext\nghidra.program.model.listing.DomainObjectChangeSet\nghidra.program.model.listing.DuplicateGroupException\nghidra.program.model.listing.FlowOverride\nghidra.program.model.listing.Function\nghidra.program.model.listing.Function.FunctionUpdateType\nghidra.program.model.listing.FunctionIterator\nghidra.program.model.listing.FunctionIterator\nghidra.program.model.listing.FunctionManager\nghidra.program.model.listing.FunctionOverlapException\nghidra.program.model.listing.FunctionSignature\nghidra.program.model.listing.FunctionSignatureImpl\nghidra.program.model.listing.FunctionTag\nghidra.program.model.listing.FunctionTagChangeSet\nghidra.program.model.listing.FunctionTagManager\nghidra.program.model.listing.GhidraClass\nghidra.program.model.listing.Group\nghidra.program.model.listing.IncompatibleLanguageException\nghidra.program.model.listing.Instruction\nghidra.program.model.listing.Instruction\nghidra.program.model.listing.InstructionIterator\nghidra.program.model.listing.InstructionIterator\nghidra.program.model.listing.InstructionPcodeOverride\nghidra.program.model.listing.InstructionStub\nghidra.program.model.listing.LabelString\nghidra.program.model.listing.LabelString.LabelType\nghidra.program.model.listing.Library\nghidra.program.model.listing.Listing\nghidra.program.model.listing.ListingStub\nghidra.program.model.listing.LocalVariable\nghidra.program.model.listing.LocalVariableImpl\nghidra.program.model.listing.OperandRepresentationList\nghidra.program.model.listing.Parameter\nghidra.program.model.listing.ParameterImpl\nghidra.program.model.listing.Program\nghidra.program.model.listing.Program\nghidra.program.model.listing.Program\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramChangeSet\nghidra.program.model.listing.ProgramContext\nghidra.program.model.listing.ProgramFragment\nghidra.program.model.listing.ProgramFragment\nghidra.program.model.listing.ProgramModule\nghidra.program.model.listing.ProgramTreeChangeSet\nghidra.program.model.listing.ProgramUserData\nghidra.program.model.listing.RegisterChangeSet\nghidra.program.model.listing.RepeatableComment\nghidra.program.model.listing.ReturnParameterImpl\nghidra.program.model.listing.StackFrame\nghidra.program.model.listing.StackVariableComparator\nghidra.program.model.listing.SymbolChangeSet\nghidra.program.model.listing.ThunkFunction\nghidra.program.model.listing.Variable\nghidra.program.model.listing.VariableFilter\nghidra.program.model.listing.VariableFilter.CompoundStackVariableFilter\nghidra.program.model.listing.VariableFilter.LocalVariableFilter\nghidra.program.model.listing.VariableFilter.MemoryVariableFilter\nghidra.program.model.listing.VariableFilter.ParameterFilter\nghidra.program.model.listing.VariableFilter.RegisterVariableFilter\nghidra.program.model.listing.VariableFilter.StackVariableFilter\nghidra.program.model.listing.VariableFilter.UniqueVariableFilter\nghidra.program.model.listing.VariableOffset\nghidra.program.model.listing.VariableSizeException\nghidra.program.model.listing.VariableStorage\nghidra.program.model.listing.VariableUtilities\nghidra.program.model.listing.VariableUtilities.VariableConflictHandler\nghidra.program.model.mem.ByteMemBufferImpl\nghidra.program.model.mem.DumbMemBufferImpl\nghidra.program.model.mem.LiveMemoryHandler\nghidra.program.model.mem.LiveMemoryListener\nghidra.program.model.mem.MemBuffer\nghidra.program.model.mem.Memory\nghidra.program.model.mem.MemoryAccessException\nghidra.program.model.mem.MemoryBlock\nghidra.program.model.mem.MemoryBlock\nghidra.program.model.mem.MemoryBlockException\nghidra.program.model.mem.MemoryBlockListener\nghidra.program.model.mem.MemoryBlockSourceInfo\nghidra.program.model.mem.MemoryBlockStub\nghidra.program.model.mem.MemoryBlockType\nghidra.program.model.mem.MemoryBufferImpl\nghidra.program.model.mem.MemoryConflictException\nghidra.program.model.mem.MemoryConstants\nghidra.program.model.mem.MemoryStub\nghidra.program.model.mem.MutableMemBuffer\nghidra.program.model.mem.WrappedMemBuffer\nghidra.program.model.pcode.AddressXML\nghidra.program.model.pcode.BlockCondition\nghidra.program.model.pcode.BlockCopy\nghidra.program.model.pcode.BlockDoWhile\nghidra.program.model.pcode.BlockGoto\nghidra.program.model.pcode.BlockGraph\nghidra.program.model.pcode.BlockIfElse\nghidra.program.model.pcode.BlockIfGoto\nghidra.program.model.pcode.BlockInfLoop\nghidra.program.model.pcode.BlockList\nghidra.program.model.pcode.BlockMap\nghidra.program.model.pcode.BlockMultiGoto\nghidra.program.model.pcode.BlockProperIf\nghidra.program.model.pcode.BlockSwitch\nghidra.program.model.pcode.BlockWhileDo\nghidra.program.model.pcode.DataTypeSymbol\nghidra.program.model.pcode.DynamicEntry\nghidra.program.model.pcode.DynamicHash\nghidra.program.model.pcode.EquateSymbol\nghidra.program.model.pcode.FunctionPrototype\nghidra.program.model.pcode.GlobalSymbolMap\nghidra.program.model.pcode.HighCodeSymbol\nghidra.program.model.pcode.HighConstant\nghidra.program.model.pcode.HighExternalSymbol\nghidra.program.model.pcode.HighFunction\nghidra.program.model.pcode.HighFunctionDBUtil\nghidra.program.model.pcode.HighFunctionShellSymbol\nghidra.program.model.pcode.HighFunctionSymbol\nghidra.program.model.pcode.HighGlobal\nghidra.program.model.pcode.HighLabelSymbol\nghidra.program.model.pcode.HighLocal\nghidra.program.model.pcode.HighOther\nghidra.program.model.pcode.HighParam\nghidra.program.model.pcode.HighParamID\nghidra.program.model.pcode.HighSymbol\nghidra.program.model.pcode.HighVariable\nghidra.program.model.pcode.JumpTable\nghidra.program.model.pcode.JumpTable.BasicOverride\nghidra.program.model.pcode.JumpTable.LoadTable\nghidra.program.model.pcode.ListLinked\nghidra.program.model.pcode.LocalSymbolMap\nghidra.program.model.pcode.MappedDataEntry\nghidra.program.model.pcode.MappedEntry\nghidra.program.model.pcode.ParamMeasure\nghidra.program.model.pcode.PcodeBlock\nghidra.program.model.pcode.PcodeBlock.BlockEdge\nghidra.program.model.pcode.PcodeBlockBasic\nghidra.program.model.pcode.PcodeDataTypeManager\nghidra.program.model.pcode.PcodeException\nghidra.program.model.pcode.PcodeFactory\nghidra.program.model.pcode.PcodeOp\nghidra.program.model.pcode.PcodeOpAST\nghidra.program.model.pcode.PcodeOpBank\nghidra.program.model.pcode.PcodeOverride\nghidra.program.model.pcode.PcodeSyntaxTree\nghidra.program.model.pcode.PcodeXMLException\nghidra.program.model.pcode.SequenceNumber\nghidra.program.model.pcode.SymbolEntry\nghidra.program.model.pcode.Varnode\nghidra.program.model.pcode.VarnodeAST\nghidra.program.model.pcode.VarnodeBank\nghidra.program.model.pcode.VarnodeBank.DefComparator\nghidra.program.model.pcode.VarnodeBank.LocComparator\nghidra.program.model.pcode.VarnodeTranslator\nghidra.program.model.reloc.Relocation\nghidra.program.model.reloc.RelocationHandler\nghidra.program.model.reloc.RelocationTable\nghidra.program.model.reloc.RelocationUtil\nghidra.program.model.scalar.Scalar\nghidra.program.model.scalar.ScalarOverflowException\nghidra.program.model.symbol.AddressLabelPair\nghidra.program.model.symbol.DataRefType\nghidra.program.model.symbol.DynamicReference\nghidra.program.model.symbol.EntryPointReference\nghidra.program.model.symbol.Equate\nghidra.program.model.symbol.EquateReference\nghidra.program.model.symbol.EquateTable\nghidra.program.model.symbol.ExternalLocation\nghidra.program.model.symbol.ExternalLocationAdapter\nghidra.program.model.symbol.ExternalLocationIterator\nghidra.program.model.symbol.ExternalManager\nghidra.program.model.symbol.ExternalPath\nghidra.program.model.symbol.ExternalReference\nghidra.program.model.symbol.FlowType\nghidra.program.model.symbol.FlowType.Builder\nghidra.program.model.symbol.LabelHistory\nghidra.program.model.symbol.MemReferenceImpl\nghidra.program.model.symbol.Namespace\nghidra.program.model.symbol.OffsetReference\nghidra.program.model.symbol.Reference\nghidra.program.model.symbol.ReferenceIterator\nghidra.program.model.symbol.ReferenceIterator\nghidra.program.model.symbol.ReferenceIteratorAdapter\nghidra.program.model.symbol.ReferenceListener\nghidra.program.model.symbol.ReferenceManager\nghidra.program.model.symbol.RefType\nghidra.program.model.symbol.RefTypeFactory\nghidra.program.model.symbol.ShiftedReference\nghidra.program.model.symbol.SourceType\nghidra.program.model.symbol.StackReference\nghidra.program.model.symbol.Symbol\nghidra.program.model.symbol.SymbolIterator\nghidra.program.model.symbol.SymbolIterator\nghidra.program.model.symbol.SymbolIteratorAdapter\nghidra.program.model.symbol.SymbolTable\nghidra.program.model.symbol.SymbolTableListener\nghidra.program.model.symbol.SymbolType\nghidra.program.model.symbol.SymbolUtilities\nghidra.program.model.symbol.ThunkReference\nghidra.program.model.util.AcyclicCallGraphBuilder\nghidra.program.model.util.AddressLabelInfo\nghidra.program.model.util.AddressSetPropertyMap\nghidra.program.model.util.CodeUnitInsertionException\nghidra.program.model.util.CompositeDataTypeElementInfo\nghidra.program.model.util.DataTypeInfo\nghidra.program.model.util.DefaultIntPropertyMap\nghidra.program.model.util.DefaultLongPropertyMap\nghidra.program.model.util.DefaultObjectPropertyMap\nghidra.program.model.util.DefaultPropertyMap\nghidra.program.model.util.DefaultSettingsPropertyMap\nghidra.program.model.util.DefaultStringPropertyMap\nghidra.program.model.util.DefaultVoidPropertyMap\nghidra.program.model.util.DeletedException\nghidra.program.model.util.IntPropertyMap\nghidra.program.model.util.LongPropertyMap\nghidra.program.model.util.MemoryByteIterator\nghidra.program.model.util.ObjectPropertyMap\nghidra.program.model.util.ProcessorSymbolType\nghidra.program.model.util.PropertyMap\nghidra.program.model.util.PropertyMapManager\nghidra.program.model.util.SettingsPropertyMap\nghidra.program.model.util.StringPropertyMap\nghidra.program.model.util.TypeMismatchException\nghidra.program.model.util.VoidPropertyMap\nghidra.program.util.AbstractProgramContext\nghidra.program.util.AbstractStoredProgramContext\nghidra.program.util.AddressCorrelation\nghidra.program.util.AddressCorrelator\nghidra.program.util.AddressEvaluator\nghidra.program.util.AddressFieldLocation\nghidra.program.util.AddressIteratorConverter\nghidra.program.util.AddressRangeIteratorConverter\nghidra.program.util.AddressTranslationException\nghidra.program.util.AddressTranslator\nghidra.program.util.AssignedVariableLocation\nghidra.program.util.AutomaticCommentFieldLocation\nghidra.program.util.BlockStartLocation\nghidra.program.util.BytesFieldLocation\nghidra.program.util.ChangeManager\nghidra.program.util.ChangeManagerAdapter\nghidra.program.util.CodeUnitContainer\nghidra.program.util.CodeUnitLCS\nghidra.program.util.CodeUnitLocation\nghidra.program.util.CodeUnitPropertyChangeRecord\nghidra.program.util.CodeUnitUserDataChangeRecord\nghidra.program.util.CombinedAddressRangeIterator\nghidra.program.util.CommentFieldLocation\nghidra.program.util.CommentType\nghidra.program.util.ContextEvaluator\nghidra.program.util.ContextEvaluatorAdapter\nghidra.program.util.CyclomaticComplexity\nghidra.program.util.DataTypeArchiveChangeManager\nghidra.program.util.DataTypeArchiveChangeRecord\nghidra.program.util.DefaultAddressTranslator\nghidra.program.util.DefaultLanguageService\nghidra.program.util.DefinedDataIterator\nghidra.program.util.DiffUtility\nghidra.program.util.DiscoverableAddressCorrelator\nghidra.program.util.DiscoverableAddressCorrelator\nghidra.program.util.DividerLocation\nghidra.program.util.ELFExternalSymbolResolver\nghidra.program.util.EolCommentFieldLocation\nghidra.program.util.EquateInfo\nghidra.program.util.EquateOperandFieldLocation\nghidra.program.util.FieldNameFieldLocation\nghidra.program.util.FunctionAddressCorrelation\nghidra.program.util.FunctionCallFixupFieldLocation\nghidra.program.util.FunctionCallingConventionFieldLocation\nghidra.program.util.FunctionEndParametersFieldLocation\nghidra.program.util.FunctionInlineFieldLocation\nghidra.program.util.FunctionLocation\nghidra.program.util.FunctionMerge\nghidra.program.util.FunctionNameFieldLocation\nghidra.program.util.FunctionNoReturnFieldLocation\nghidra.program.util.FunctionParameterFieldLocation\nghidra.program.util.FunctionParameterNameFieldLocation\nghidra.program.util.FunctionPurgeFieldLocation\nghidra.program.util.FunctionRepeatableCommentFieldLocation\nghidra.program.util.FunctionReturnTypeFieldLocation\nghidra.program.util.FunctionSignatureFieldLocation\nghidra.program.util.FunctionSignatureSourceFieldLocation\nghidra.program.util.FunctionStartParametersFieldLocation\nghidra.program.util.FunctionTagFieldLocation\nghidra.program.util.FunctionThunkFieldLocation\nghidra.program.util.FunctionUtility\nghidra.program.util.GhidraProgramUtilities\nghidra.program.util.GroupPath\nghidra.program.util.GroupView\nghidra.program.util.IndentFieldLocation\nghidra.program.util.InstructionMaskValueFieldLocation\nghidra.program.util.InstructionUtils\nghidra.program.util.InteriorSelection\nghidra.program.util.LabelFieldLocation\nghidra.program.util.LanguagePostUpgradeInstructionHandler\nghidra.program.util.LanguageTranslator\nghidra.program.util.LanguageTranslatorAdapter\nghidra.program.util.LanguageTranslatorFactory\nghidra.program.util.LanguageTranslatorFactoryMinion\nghidra.program.util.LinearDataAddressCorrelation\nghidra.program.util.ListingAddressCorrelation\nghidra.program.util.ListingDiff\nghidra.program.util.MarkerLocation\nghidra.program.util.MemoryBlockDiff\nghidra.program.util.MemoryBlockStartFieldLocation\nghidra.program.util.MemoryDiff\nghidra.program.util.MemoryRangeDiff\nghidra.program.util.MnemonicFieldLocation\nghidra.program.util.MultiAddressIterator\nghidra.program.util.MultiAddressRangeIterator\nghidra.program.util.MultiCodeUnitIterator\nghidra.program.util.OldLanguageFactory\nghidra.program.util.OperandFieldLocation\nghidra.program.util.ParallelInstructionLocation\nghidra.program.util.PcodeFieldLocation\nghidra.program.util.PlateFieldLocation\nghidra.program.util.PostCommentFieldLocation\nghidra.program.util.ProgramChangeRecord\nghidra.program.util.ProgramConflictException\nghidra.program.util.ProgramContextImpl\nghidra.program.util.ProgramDiff\nghidra.program.util.ProgramDiffDetails\nghidra.program.util.ProgramDiffFilter\nghidra.program.util.ProgramLocation\nghidra.program.util.ProgramLocationComparator\nghidra.program.util.ProgramMemoryComparator\nghidra.program.util.ProgramMemoryUtil\nghidra.program.util.ProgramMerge\nghidra.program.util.ProgramMergeFilter\nghidra.program.util.ProgramMergeManager\nghidra.program.util.ProgramSelection\nghidra.program.util.ProgramTask\nghidra.program.util.ProgramUtilities\nghidra.program.util.RangeMapAdapter\nghidra.program.util.RefRepeatCommentFieldLocation\nghidra.program.util.RegisterFieldLocation\nghidra.program.util.RegisterTransitionFieldLocation\nghidra.program.util.RegisterValueStore\nghidra.program.util.RepeatableCommentFieldLocation\nghidra.program.util.SimpleDiffUtility\nghidra.program.util.SpaceFieldLocation\nghidra.program.util.SpacerFieldLocation\nghidra.program.util.StackDepthFieldLocation\nghidra.program.util.string.AbstractStringSearcher\nghidra.program.util.string.FoundString\nghidra.program.util.string.FoundString.DefinedState\nghidra.program.util.string.FoundStringCallback\nghidra.program.util.string.PascalStringSearcher\nghidra.program.util.string.PascalUtil\nghidra.program.util.string.StringSearcher\nghidra.program.util.SubDataFieldLocation\nghidra.program.util.SymbolicPropogator\nghidra.program.util.SymbolicPropogator.SavedFlowState\nghidra.program.util.SymbolicPropogator.Value\nghidra.program.util.ThunkedFunctionFieldLocation\nghidra.program.util.UserDataChangeRecord\nghidra.program.util.VariableCommentFieldLocation\nghidra.program.util.VariableLocation\nghidra.program.util.VariableLocFieldLocation\nghidra.program.util.VariableNameFieldLocation\nghidra.program.util.VariableStorageConflicts\nghidra.program.util.VariableTypeFieldLocation\nghidra.program.util.VariableXRefFieldLocation\nghidra.program.util.VariableXRefHeaderFieldLocation\nghidra.program.util.VarnodeContext\nghidra.program.util.XRefFieldLocation\nghidra.program.util.XRefHeaderFieldLocation\nghidra.project.test.TestProjectManager\nghidra.ProjectInitializer\nghidra.python.GhidraPythonInterpreter\nghidra.python.PyDevUtils\nghidra.python.PythonCodeCompletionFactory\nghidra.python.PythonPlugin\nghidra.python.PythonRun\nghidra.python.PythonScript\nghidra.python.PythonScriptProvider\nghidra.python.PythonUtils\nghidra.security.KeyStorePasswordProvider\nghidra.service.graph.Attributed\nghidra.service.graph.AttributedEdge\nghidra.service.graph.AttributedGraph\nghidra.service.graph.AttributedGraphExporter\nghidra.service.graph.AttributedVertex\nghidra.service.graph.DefaultGraphDisplayOptions\nghidra.service.graph.DummyGraphDisplayListener\nghidra.service.graph.EdgeGraphActionContext\nghidra.service.graph.EmptyGraphType\nghidra.service.graph.GraphActionContext\nghidra.service.graph.GraphDisplay\nghidra.service.graph.GraphDisplayListener\nghidra.service.graph.GraphDisplayOptions\nghidra.service.graph.GraphDisplayOptionsBuilder\nghidra.service.graph.GraphDisplayProvider\nghidra.service.graph.GraphLabelPosition\nghidra.service.graph.GraphType\nghidra.service.graph.GraphTypeBuilder\nghidra.service.graph.LayoutAlgorithmNames\nghidra.service.graph.VertexGraphActionContext\nghidra.service.graph.VertexShape\nghidra.sleigh.grammar.AbstractSleighLexer\nghidra.sleigh.grammar.AbstractSleighParser\nghidra.sleigh.grammar.ANTLRUtil\nghidra.sleigh.grammar.BailoutException\nghidra.sleigh.grammar.BaseLexer\nghidra.sleigh.grammar.BaseLexer.DFA13\nghidra.sleigh.grammar.BaseRecognizerOverride\nghidra.sleigh.grammar.BooleanExpressionLexer\nghidra.sleigh.grammar.BooleanExpressionParser\nghidra.sleigh.grammar.DisplayLexer\nghidra.sleigh.grammar.DisplayLexer.DFA2\nghidra.sleigh.grammar.DisplayLexer_BaseLexer\nghidra.sleigh.grammar.DisplayLexer_BaseLexer.DFA13\nghidra.sleigh.grammar.ExpressionEnvironment\nghidra.sleigh.grammar.HashMapPreprocessorDefinitionsAdapter\nghidra.sleigh.grammar.LexerMultiplexer\nghidra.sleigh.grammar.LineArrayListWriter\nghidra.sleigh.grammar.Location\nghidra.sleigh.grammar.LocationUtil\nghidra.sleigh.grammar.Locator\nghidra.sleigh.grammar.ParsingEnvironment\nghidra.sleigh.grammar.PreprocessorException\nghidra.sleigh.grammar.RadixBigInteger\nghidra.sleigh.grammar.SemanticLexer\nghidra.sleigh.grammar.SemanticLexer_BaseLexer\nghidra.sleigh.grammar.SemanticLexer_BaseLexer.DFA13\nghidra.sleigh.grammar.SleighCompiler\nghidra.sleigh.grammar.SleighCompiler.Block_scope\nghidra.sleigh.grammar.SleighCompiler.code_block_scope\nghidra.sleigh.grammar.SleighCompiler.contextdef_scope\nghidra.sleigh.grammar.SleighCompiler.ctorstart_scope\nghidra.sleigh.grammar.SleighCompiler.DFA52\nghidra.sleigh.grammar.SleighCompiler.DFA57\nghidra.sleigh.grammar.SleighCompiler.DFA58\nghidra.sleigh.grammar.SleighCompiler.fielddef_scope\nghidra.sleigh.grammar.SleighCompiler.id_or_nil_return\nghidra.sleigh.grammar.SleighCompiler.identifier_return\nghidra.sleigh.grammar.SleighCompiler.Jump_scope\nghidra.sleigh.grammar.SleighCompiler.macrodef_scope\nghidra.sleigh.grammar.SleighCompiler.Return_scope\nghidra.sleigh.grammar.SleighCompiler.semantic_scope\nghidra.sleigh.grammar.SleighCompiler.spacedef_scope\nghidra.sleigh.grammar.SleighCompiler.tokendef_scope\nghidra.sleigh.grammar.SleighEcho\nghidra.sleigh.grammar.SleighEcho.DFA32\nghidra.sleigh.grammar.SleighEcho.DFA34\nghidra.sleigh.grammar.SleighEcho.endian_return\nghidra.sleigh.grammar.SleighLexer\nghidra.sleigh.grammar.SleighParser\nghidra.sleigh.grammar.SleighParser.aligndef_return\nghidra.sleigh.grammar.SleighParser.arguments_return\nghidra.sleigh.grammar.SleighParser.bitpat_or_nil_return\nghidra.sleigh.grammar.SleighParser.bitpattern_return\nghidra.sleigh.grammar.SleighParser.bitrange_return\nghidra.sleigh.grammar.SleighParser.bitrangedef_return\nghidra.sleigh.grammar.SleighParser.bitranges_return\nghidra.sleigh.grammar.SleighParser.constraint_op_return\nghidra.sleigh.grammar.SleighParser.constraint_return\nghidra.sleigh.grammar.SleighParser.constructor_return\nghidra.sleigh.grammar.SleighParser.constructorlike_return\nghidra.sleigh.grammar.SleighParser.constructorlikelist_return\nghidra.sleigh.grammar.SleighParser.contextblock_return\nghidra.sleigh.grammar.SleighParser.contextdef_return\nghidra.sleigh.grammar.SleighParser.contextfielddef_return\nghidra.sleigh.grammar.SleighParser.contextfielddefs_return\nghidra.sleigh.grammar.SleighParser.contextfieldmod_return\nghidra.sleigh.grammar.SleighParser.contextfieldmods_return\nghidra.sleigh.grammar.SleighParser.ctorsemantic_return\nghidra.sleigh.grammar.SleighParser.ctorstart_return\nghidra.sleigh.grammar.SleighParser.ctxassign_return\nghidra.sleigh.grammar.SleighParser.ctxlval_return\nghidra.sleigh.grammar.SleighParser.ctxstmt_return\nghidra.sleigh.grammar.SleighParser.ctxstmts_return\nghidra.sleigh.grammar.SleighParser.def_or_conslike_return\nghidra.sleigh.grammar.SleighParser.definition_return\nghidra.sleigh.grammar.SleighParser.endian_return\nghidra.sleigh.grammar.SleighParser.endiandef_return\nghidra.sleigh.grammar.SleighParser.fielddef_return\nghidra.sleigh.grammar.SleighParser.fielddefs_return\nghidra.sleigh.grammar.SleighParser.fieldmod_return\nghidra.sleigh.grammar.SleighParser.fieldmods_return\nghidra.sleigh.grammar.SleighParser.id_or_nil_return\nghidra.sleigh.grammar.SleighParser.id_or_wild_return\nghidra.sleigh.grammar.SleighParser.identifier_return\nghidra.sleigh.grammar.SleighParser.identifierlist_return\nghidra.sleigh.grammar.SleighParser.intblist_return\nghidra.sleigh.grammar.SleighParser.intbpart_return\nghidra.sleigh.grammar.SleighParser.integer_return\nghidra.sleigh.grammar.SleighParser.key_as_id_return\nghidra.sleigh.grammar.SleighParser.macrodef_return\nghidra.sleigh.grammar.SleighParser.nameattach_return\nghidra.sleigh.grammar.SleighParser.neginteger_return\nghidra.sleigh.grammar.SleighParser.oplist_return\nghidra.sleigh.grammar.SleighParser.pcodeopdef_return\nghidra.sleigh.grammar.SleighParser.pequation_and_op_return\nghidra.sleigh.grammar.SleighParser.pequation_and_return\nghidra.sleigh.grammar.SleighParser.pequation_atomic_return\nghidra.sleigh.grammar.SleighParser.pequation_ellipsis_return\nghidra.sleigh.grammar.SleighParser.pequation_ellipsis_right_return\nghidra.sleigh.grammar.SleighParser.pequation_or_op_return\nghidra.sleigh.grammar.SleighParser.pequation_or_return\nghidra.sleigh.grammar.SleighParser.pequation_return\nghidra.sleigh.grammar.SleighParser.pequation_seq_op_return\nghidra.sleigh.grammar.SleighParser.pequation_seq_return\nghidra.sleigh.grammar.SleighParser.pexpression2_add_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_add_return\nghidra.sleigh.grammar.SleighParser.pexpression2_and_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_and_return\nghidra.sleigh.grammar.SleighParser.pexpression2_apply_return\nghidra.sleigh.grammar.SleighParser.pexpression2_func_return\nghidra.sleigh.grammar.SleighParser.pexpression2_mult_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_mult_return\nghidra.sleigh.grammar.SleighParser.pexpression2_operands_return\nghidra.sleigh.grammar.SleighParser.pexpression2_or_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_or_return\nghidra.sleigh.grammar.SleighParser.pexpression2_return\nghidra.sleigh.grammar.SleighParser.pexpression2_shift_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_shift_return\nghidra.sleigh.grammar.SleighParser.pexpression2_term_return\nghidra.sleigh.grammar.SleighParser.pexpression2_unary_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_unary_return\nghidra.sleigh.grammar.SleighParser.pexpression2_xor_op_return\nghidra.sleigh.grammar.SleighParser.pexpression2_xor_return\nghidra.sleigh.grammar.SleighParser.pexpression_add_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_add_return\nghidra.sleigh.grammar.SleighParser.pexpression_and_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_and_return\nghidra.sleigh.grammar.SleighParser.pexpression_apply_return\nghidra.sleigh.grammar.SleighParser.pexpression_func_return\nghidra.sleigh.grammar.SleighParser.pexpression_mult_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_mult_return\nghidra.sleigh.grammar.SleighParser.pexpression_operands_return\nghidra.sleigh.grammar.SleighParser.pexpression_or_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_or_return\nghidra.sleigh.grammar.SleighParser.pexpression_return\nghidra.sleigh.grammar.SleighParser.pexpression_shift_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_shift_return\nghidra.sleigh.grammar.SleighParser.pexpression_term_return\nghidra.sleigh.grammar.SleighParser.pexpression_unary_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_unary_return\nghidra.sleigh.grammar.SleighParser.pexpression_xor_op_return\nghidra.sleigh.grammar.SleighParser.pexpression_xor_return\nghidra.sleigh.grammar.SleighParser.pfuncall_return\nghidra.sleigh.grammar.SleighParser.qstring_return\nghidra.sleigh.grammar.SleighParser.sizemod_return\nghidra.sleigh.grammar.SleighParser.spacedef_return\nghidra.sleigh.grammar.SleighParser.spacemod_return\nghidra.sleigh.grammar.SleighParser.spacemods_return\nghidra.sleigh.grammar.SleighParser.spec_return\nghidra.sleigh.grammar.SleighParser.strict_id_return\nghidra.sleigh.grammar.SleighParser.stringorident_return\nghidra.sleigh.grammar.SleighParser.stringoridentlist_return\nghidra.sleigh.grammar.SleighParser.tokendef_return\nghidra.sleigh.grammar.SleighParser.type_return\nghidra.sleigh.grammar.SleighParser.typemod_return\nghidra.sleigh.grammar.SleighParser.valueattach_return\nghidra.sleigh.grammar.SleighParser.varattach_return\nghidra.sleigh.grammar.SleighParser.varnodedef_return\nghidra.sleigh.grammar.SleighParser.wildcard_return\nghidra.sleigh.grammar.SleighParser.withblock_return\nghidra.sleigh.grammar.SleighParser.wordsizemod_return\nghidra.sleigh.grammar.SleighParser_DisplayParser\nghidra.sleigh.grammar.SleighParser_DisplayParser.concatenate_return\nghidra.sleigh.grammar.SleighParser_DisplayParser.display_return\nghidra.sleigh.grammar.SleighParser_DisplayParser.pieces_return\nghidra.sleigh.grammar.SleighParser_DisplayParser.printpiece_return\nghidra.sleigh.grammar.SleighParser_DisplayParser.special_return\nghidra.sleigh.grammar.SleighParser_DisplayParser.whitespace_return\nghidra.sleigh.grammar.SleighParser_SemanticParser\nghidra.sleigh.grammar.SleighParser_SemanticParser.add_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.assignment_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.booland_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.build_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.call_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.code_block_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.compare_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.cond_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.constant_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.crossbuild_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.declaration_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.DFA3\nghidra.sleigh.grammar.SleighParser_SemanticParser.eq_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.export_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_add_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_and_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_and_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_apply_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_booland_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_boolor_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_boolor_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_comp_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_eq_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_func_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_mult_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_operands_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_or_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_or_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_shift_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_term_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_unary_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_xor_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.expr_xor_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.funcall_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.goto_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.jumpdest_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.label_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.lvalue_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.mult_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.outererror_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.return_stmt_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.section_def_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.semantic_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.semanticbody_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.sembitrange_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.shift_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.sizedexport_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.sizedstar_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.statement_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.statements_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.unary_op_return\nghidra.sleigh.grammar.SleighParser_SemanticParser.varnode_return\nghidra.sleigh.grammar.SleighParserRun\nghidra.sleigh.grammar.SleighPreprocessor\nghidra.sleigh.grammar.SleighRecognizerConstants\nghidra.sleigh.grammar.SleighToken\nghidra.sleigh.grammar.SourceFileIndexer\nghidra.sleigh.grammar.TokenExtractor\nghidra.SoftwareModelingInitializer\nghidra.SwingExceptionHandler\nghidra.test.AbstractGhidraHeadedIntegrationTest\nghidra.test.AbstractGhidraHeadlessIntegrationTest\nghidra.test.AbstractProgramBasedTest\nghidra.test.ClassicSampleX86ProgramBuilder\nghidra.test.processors.support.EmulatorTestRunner\nghidra.test.processors.support.EmulatorTestRunner.DumpFormat\nghidra.test.processors.support.ExecutionListener\nghidra.test.processors.support.PCodeTestAbstractControlBlock\nghidra.test.processors.support.PCodeTestAbstractControlBlock.FunctionInfo\nghidra.test.processors.support.PCodeTestCombinedTestResults\nghidra.test.processors.support.PCodeTestControlBlock\nghidra.test.processors.support.PCodeTestFile\nghidra.test.processors.support.PCodeTestGroup\nghidra.test.processors.support.PCodeTestGroupControlBlock\nghidra.test.processors.support.PCodeTestResults\nghidra.test.processors.support.ProcessorEmulatorTestAdapter\nghidra.test.processors.support.TestLogger\nghidra.test.ProjectTestUtils\nghidra.test.ScriptTaskListener\nghidra.test.TestEnv\nghidra.test.TestProcessorConstants\nghidra.test.TestProgramManager\nghidra.test.TestTool\nghidra.test.ToyProgramBuilder\nghidra.util.ascii.AsciiCharSetRecognizer\nghidra.util.ascii.ByteStreamCharMatcher\nghidra.util.ascii.CharSetRecognizer\nghidra.util.ascii.CharWidth\nghidra.util.ascii.MinLengthCharSequenceMatcher\nghidra.util.ascii.MultiByteCharMatcher\nghidra.util.ascii.Sequence\nghidra.util.bean.field.AnnotatedTextFieldElement\nghidra.util.bean.GGlassPane\nghidra.util.bean.GGlassPanePainter\nghidra.util.bean.opteditor.OptionsVetoException\nghidra.util.BeginningOfLineAction\nghidra.util.BigEndianDataConverter\nghidra.util.BoundedInputStream\nghidra.util.BrowserLoader\nghidra.util.bytesearch.AlignRule\nghidra.util.bytesearch.DittedBitSequence\nghidra.util.bytesearch.DummyMatchAction\nghidra.util.bytesearch.GenericByteSequencePattern\nghidra.util.bytesearch.GenericMatchAction\nghidra.util.bytesearch.Match\nghidra.util.bytesearch.MatchAction\nghidra.util.bytesearch.MemoryBytePatternSearcher\nghidra.util.bytesearch.Pattern\nghidra.util.bytesearch.PatternFactory\nghidra.util.bytesearch.PatternPairSet\nghidra.util.bytesearch.PostRule\nghidra.util.bytesearch.SequenceSearchState\nghidra.util.CascadedDropTarget\nghidra.util.classfinder.ClassExclusionFilter\nghidra.util.classfinder.ClassFilter\nghidra.util.classfinder.ClassFinder\nghidra.util.classfinder.ClassSearcher\nghidra.util.classfinder.ClassTranslator\nghidra.util.classfinder.ExtensionPoint\nghidra.util.classfinder.ExtensionPointProperties\nghidra.util.classfinder.ExtensionPointProperties.Util\nghidra.util.ColorUtils\nghidra.util.ColorUtils.ColorBlender\nghidra.util.ConsoleErrorDisplay\nghidra.util.constraint.CompilerConstraint\nghidra.util.constraint.ExecutableFormatConstraint\nghidra.util.constraint.LanguageConstraint\nghidra.util.constraint.ProgramConstraint\nghidra.util.constraint.ProgramDecisionTree\nghidra.util.constraint.PropertyConstraint\nghidra.util.Conv\nghidra.util.CountLatch\nghidra.util.data.DataTypeParser\nghidra.util.data.DataTypeParser.AllowedDataTypes\nghidra.util.DataConverter\nghidra.util.datastruct.AbstractWeakValueMap\nghidra.util.datastruct.AbstractWeakValueMap.GeneratedEntry\nghidra.util.datastruct.AbstractWeakValueMap.WeakValueRef\nghidra.util.datastruct.AbstractWeakValueNavigableMap\nghidra.util.datastruct.AbstractWeakValueNavigableMap.NavigableView\nghidra.util.datastruct.Accumulator\nghidra.util.datastruct.Algorithms\nghidra.util.datastruct.Array\nghidra.util.datastruct.BitTree\nghidra.util.datastruct.BooleanArray\nghidra.util.datastruct.ByteArray\nghidra.util.datastruct.ByteArrayArray\nghidra.util.datastruct.CallbackAccumulator\nghidra.util.datastruct.CaseInsensitiveDuplicateStringComparator\nghidra.util.datastruct.CopyOnReadWeakSet\nghidra.util.datastruct.Counter\nghidra.util.datastruct.DataTable\nghidra.util.datastruct.DoubleArray\nghidra.util.datastruct.DoubleArrayArray\nghidra.util.datastruct.FilteringAccumulatorWrapper\nghidra.util.datastruct.FixedSizeHashMap\nghidra.util.datastruct.FixedSizeStack\nghidra.util.datastruct.FloatArray\nghidra.util.datastruct.FloatArrayArray\nghidra.util.datastruct.FullKeySet\nghidra.util.datastruct.IndexRange\nghidra.util.datastruct.IndexRangeIterator\nghidra.util.datastruct.IntArray\nghidra.util.datastruct.IntArrayArray\nghidra.util.datastruct.IntArrayList\nghidra.util.datastruct.IntIndexManager\nghidra.util.datastruct.IntIntHashtable\nghidra.util.datastruct.IntKeyIndexer\nghidra.util.datastruct.IntListIndexer\nghidra.util.datastruct.IntObjectHashtable\nghidra.util.datastruct.IntSet\nghidra.util.datastruct.ListAccumulator\nghidra.util.datastruct.LongArray\nghidra.util.datastruct.LongArrayArray\nghidra.util.datastruct.LongArrayList\nghidra.util.datastruct.LongComparator\nghidra.util.datastruct.LongDoubleHashtable\nghidra.util.datastruct.LongIntHashtable\nghidra.util.datastruct.LongKeyIndexer\nghidra.util.datastruct.LongLongHashtable\nghidra.util.datastruct.LongObjectHashtable\nghidra.util.datastruct.LRUMap\nghidra.util.datastruct.LRUSet\nghidra.util.datastruct.ManagedDataTable\nghidra.util.datastruct.NoSuchIndexException\nghidra.util.datastruct.ObjectArray\nghidra.util.datastruct.ObjectCache\nghidra.util.datastruct.ObjectIntHashtable\nghidra.util.datastruct.ObjectKeyIndexer\nghidra.util.datastruct.ObjectLongHashtable\nghidra.util.datastruct.ObjectRangeMap\nghidra.util.datastruct.ObjectValueRange\nghidra.util.datastruct.Prime\nghidra.util.datastruct.PriorityQueue\nghidra.util.datastruct.PropertySetIndexRangeIterator\nghidra.util.datastruct.QueueStub\nghidra.util.datastruct.Range\nghidra.util.datastruct.RangeMap\nghidra.util.datastruct.RedBlackEntry\nghidra.util.datastruct.RedBlackKeySet\nghidra.util.datastruct.RedBlackLongKeySet\nghidra.util.datastruct.RedBlackTree\nghidra.util.datastruct.SetAccumulator\nghidra.util.datastruct.ShortArray\nghidra.util.datastruct.ShortArrayArray\nghidra.util.datastruct.ShortKeyIndexer\nghidra.util.datastruct.ShortKeySet\nghidra.util.datastruct.ShortListIndexer\nghidra.util.datastruct.ShortLongHashtable\nghidra.util.datastruct.ShortObjectHashtable\nghidra.util.datastruct.ShortRangeMap\nghidra.util.datastruct.ShortStringHashtable\nghidra.util.datastruct.SizeLimitedAccumulatorWrapper\nghidra.util.datastruct.SoftCacheMap\nghidra.util.datastruct.SortedRangeList\nghidra.util.datastruct.Stack\nghidra.util.datastruct.StringArray\nghidra.util.datastruct.StringArrayArray\nghidra.util.datastruct.StringIntHashtable\nghidra.util.datastruct.StringKeyIndexer\nghidra.util.datastruct.SynchronizedListAccumulator\nghidra.util.datastruct.ValueRange\nghidra.util.datastruct.WeakDataStructureFactory\nghidra.util.datastruct.WeakSet\nghidra.util.datastruct.WeakValueHashMap\nghidra.util.datastruct.WeakValueTreeMap\nghidra.util.DateUtils\nghidra.util.DefaultErrorLogger\nghidra.util.DeleteToEndOfWordAction\nghidra.util.DeleteToStartOfWordAction\nghidra.util.Disposable\nghidra.util.EndOfLineAction\nghidra.util.ErrorDisplay\nghidra.util.ErrorLogger\nghidra.util.exception.AssertException\nghidra.util.exception.CancelledException\nghidra.util.exception.ClosedException\nghidra.util.exception.CryptoException\nghidra.util.exception.DuplicateFileException\nghidra.util.exception.DuplicateNameException\nghidra.util.exception.FileInUseException\nghidra.util.exception.GraphException\nghidra.util.exception.InvalidInputException\nghidra.util.exception.IOCancelledException\nghidra.util.exception.MultipleCauses\nghidra.util.exception.MultipleCauses.Util\nghidra.util.exception.NotEmptyException\nghidra.util.exception.NotFoundException\nghidra.util.exception.NotYetImplementedException\nghidra.util.exception.NoValueException\nghidra.util.exception.PropertyTypeMismatchException\nghidra.util.exception.RollbackException\nghidra.util.exception.TimeoutException\nghidra.util.exception.UnableToSwingException\nghidra.util.exception.UserAccessException\nghidra.util.exception.UsrException\nghidra.util.exception.VersionException\nghidra.util.filechooser.ExtensionFileFilter\nghidra.util.filechooser.GhidraFileChooserListener\nghidra.util.filechooser.GhidraFileChooserModel\nghidra.util.filechooser.GhidraFileFilter\nghidra.util.FilterTransformer\nghidra.util.Fixup\nghidra.util.GhidraBigEndianDataConverter\nghidra.util.GhidraDataConverter\nghidra.util.GhidraJarBuilder\nghidra.util.GhidraLittleEndianDataConverter\nghidra.util.graph.AbstractDependencyGraph\nghidra.util.graph.AbstractDependencyGraph.DependencyNode\nghidra.util.graph.AddableLongDoubleHashtable\nghidra.util.graph.AddableLongIntHashtable\nghidra.util.graph.attributes.Attribute\nghidra.util.graph.attributes.AttributeManager\nghidra.util.graph.attributes.DoubleAttribute\nghidra.util.graph.attributes.IntegerAttribute\nghidra.util.graph.attributes.LongAttribute\nghidra.util.graph.attributes.ObjectAttribute\nghidra.util.graph.attributes.StringAttribute\nghidra.util.graph.DependencyGraph\nghidra.util.graph.DepthFirstSearch\nghidra.util.graph.DeterministicDependencyGraph\nghidra.util.graph.DirectedGraph\nghidra.util.graph.Dominator\nghidra.util.graph.Edge\nghidra.util.graph.GraphIterator\nghidra.util.graph.KeyedObject\nghidra.util.graph.KeyedObjectFactory\nghidra.util.graph.KeyIndexableSet\nghidra.util.graph.Path\nghidra.util.graph.SimpleWeightedDigraph\nghidra.util.graph.Vertex\nghidra.util.graph.WeightedDigraph\nghidra.util.HashingOutputStream\nghidra.util.HashUtilities\nghidra.util.HelpLocation\nghidra.util.html.HTMLElement\nghidra.util.html.HtmlLineSplitter\nghidra.util.HTMLUtilities\nghidra.util.InvalidNameException\nghidra.util.Issue\nghidra.util.JavaSourceFile\nghidra.util.JavaSourceLine\nghidra.util.LaunchErrorDialog\nghidra.util.layout.ColumnLayout\nghidra.util.layout.HorizontalLayout\nghidra.util.layout.MaximizeSpecificColumnGridLayout\nghidra.util.layout.MiddleLayout\nghidra.util.layout.PairLayout\nghidra.util.layout.RightSidedSquishyBuddyLayout\nghidra.util.layout.RowColumnLayout\nghidra.util.layout.RowLayout\nghidra.util.layout.StretchLayout\nghidra.util.layout.TwoColumnPairLayout\nghidra.util.layout.VariableHeightPairLayout\nghidra.util.layout.VariableRowHeightGridLayout\nghidra.util.layout.VerticalLayout\nghidra.util.LittleEndianDataConverter\nghidra.util.Location\nghidra.util.Lock\nghidra.util.LongIterator\nghidra.util.ManualEntry\nghidra.util.ManualViewerCommandEditor\nghidra.util.ManualViewerCommandWrappedOption\nghidra.util.MathUtilities\nghidra.util.MD5Utilities\nghidra.util.MessageType\nghidra.util.MonitoredInputStream\nghidra.util.MonitoredOutputStream\nghidra.util.Msg\nghidra.util.MultiComparableArrayIterator\nghidra.util.NamingUtilities\nghidra.util.NotOwnerException\nghidra.util.NullOutputStream\nghidra.util.NumberUtil\nghidra.util.NumericUtilities\nghidra.util.ObjectStorage\nghidra.util.ObjectStorageStreamAdapter\nghidra.util.PrivateSaveable\nghidra.util.prop.BytePropertySet\nghidra.util.prop.IntPropertySet\nghidra.util.prop.LongPropertySet\nghidra.util.prop.ObjectPropertySet\nghidra.util.prop.ObjectStorageAdapter\nghidra.util.prop.PropertySet\nghidra.util.prop.PropertyVisitor\nghidra.util.prop.SaveableObjectPropertySet\nghidra.util.prop.ShortPropertySet\nghidra.util.prop.StringPropertySet\nghidra.util.prop.VoidPropertySet\nghidra.util.PropertyFile\nghidra.util.ReadOnlyException\nghidra.util.ReservedKeyBindings\nghidra.util.ReversedListIterator\nghidra.util.Saveable\nghidra.util.SaveableColor\nghidra.util.SaveablePoint\nghidra.util.search.InstructionSkipper\nghidra.util.search.memory.CodeUnitSearchInfo\nghidra.util.search.memory.MemoryAddressSetCharSequence\nghidra.util.search.memory.MemorySearchAlgorithm\nghidra.util.search.memory.MemSearcherAlgorithm\nghidra.util.search.memory.MemSearcherTask\nghidra.util.search.memory.MemSearchResult\nghidra.util.search.memory.RegExMemSearcherAlgorithm\nghidra.util.search.memory.SearchInfo\nghidra.util.search.trie.ByteTrie\nghidra.util.search.trie.ByteTrieIfc\nghidra.util.search.trie.ByteTrieNode\nghidra.util.search.trie.ByteTrieNodeIfc\nghidra.util.search.trie.CaseInsensitiveByteTrie\nghidra.util.search.trie.CaseInsensitiveByteTrieNode\nghidra.util.search.trie.Op\nghidra.util.search.trie.SearchResult\nghidra.util.SelectBeginningOfLineAction\nghidra.util.SelectEndOfLineAction\nghidra.util.SignednessFormatMode\nghidra.util.state.analysis.MySwitchAnalyzer\nghidra.util.state.analysis.RelativeJumpTableSwitch\nghidra.util.state.analysis.Switch\nghidra.util.state.analysis.TableEntry\nghidra.util.state.ContextState\nghidra.util.state.FunctionAnalyzer\nghidra.util.state.ResultsState\nghidra.util.state.ResultsState.FramePointerCandidate\nghidra.util.state.SequenceRange\nghidra.util.state.VarnodeOperation\nghidra.util.StatusListener\nghidra.util.StringFormat\nghidra.util.StringUtilities\nghidra.util.StringUtilities.LineWrapper\nghidra.util.Swing\nghidra.util.SystemUtilities\nghidra.util.table.AbstractSelectionNavigationAction\nghidra.util.table.actions.DeleteTableRowAction\nghidra.util.table.actions.MakeProgramSelectionAction\nghidra.util.table.AddressArrayTableModel\nghidra.util.table.AddressBasedTableModel\nghidra.util.table.AddressPreviewTableModel\nghidra.util.table.AddressSetTableModel\nghidra.util.table.CodeUnitTableCellRenderer\nghidra.util.table.column.AbstractGColumnRenderer\nghidra.util.table.column.AbstractGhidraColumnRenderer\nghidra.util.table.column.AbstractWrapperTypeColumnRenderer\nghidra.util.table.column.DefaultTimestampRenderer\nghidra.util.table.column.GColumnRenderer\nghidra.util.table.column.GColumnRenderer.ColumnConstraintFilterMode\nghidra.util.table.CompositeGhidraTableCellRenderer\nghidra.util.table.CustomLoadingAddressTableModel\nghidra.util.table.EmptyThreadedTableModel\nghidra.util.table.field.AbstractProgramBasedDynamicTableColumn\nghidra.util.table.field.AbstractProgramLocationTableColumn\nghidra.util.table.field.AbstractReferenceBytesTableColumn\nghidra.util.table.field.AbstractReferencePreviewTableColumn\nghidra.util.table.field.AddressBasedLocation\nghidra.util.table.field.AddressTableColumn\nghidra.util.table.field.AddressTableDataTableColumn\nghidra.util.table.field.AddressTableLengthTableColumn\nghidra.util.table.field.ByteCountProgramLocationBasedTableColumn\nghidra.util.table.field.ByteCountSettingsDefinition\nghidra.util.table.field.BytesTableColumn\nghidra.util.table.field.CodeUnitCountSettingsDefinition\nghidra.util.table.field.CodeUnitOffsetSettingsDefinition\nghidra.util.table.field.CodeUnitTableCellData\nghidra.util.table.field.CodeUnitTableColumn\nghidra.util.table.field.EOLCommentTableColumn\nghidra.util.table.field.FunctionBodySizeTableColumn\nghidra.util.table.field.FunctionCallingConventionTableColumn\nghidra.util.table.field.FunctionInlineSettingsDefinition\nghidra.util.table.field.FunctionNameTableColumn\nghidra.util.table.field.FunctionNoReturnSettingsDefinition\nghidra.util.table.field.FunctionParameterCountTableColumn\nghidra.util.table.field.FunctionPurgeTableColumn\nghidra.util.table.field.FunctionSignatureTableColumn\nghidra.util.table.field.FunctionTagTableColumn\nghidra.util.table.field.FunctionThunkSettingsDefinition\nghidra.util.table.field.IncomingReferenceEndpoint\nghidra.util.table.field.IsFunctionCustomStorageTableColumn\nghidra.util.table.field.IsFunctionInlineTableColumn\nghidra.util.table.field.IsFunctionNonReturningTableColumn\nghidra.util.table.field.IsFunctionVarargsTableColumn\nghidra.util.table.field.LabelTableColumn\nghidra.util.table.field.MemoryOffsetSettingsDefinition\nghidra.util.table.field.MemorySectionProgramLocationBasedTableColumn\nghidra.util.table.field.MemoryTypeProgramLocationBasedTableColumn\nghidra.util.table.field.NamespaceTableColumn\nghidra.util.table.field.OffcutReferenceCountToAddressTableColumn\nghidra.util.table.field.OutgoingReferenceEndpoint\nghidra.util.table.field.PreviewTableColumn\nghidra.util.table.field.ProgramBasedDynamicTableColumn\nghidra.util.table.field.ProgramBasedDynamicTableColumnExtensionPoint\nghidra.util.table.field.ProgramLocationTableColumn\nghidra.util.table.field.ProgramLocationTableColumnExtensionPoint\nghidra.util.table.field.ReferenceCountToAddressTableColumn\nghidra.util.table.field.ReferenceEndpoint\nghidra.util.table.field.ReferenceFromAddressTableColumn\nghidra.util.table.field.ReferenceFromBytesTableColumn\nghidra.util.table.field.ReferenceFromFunctionTableColumn\nghidra.util.table.field.ReferenceFromLabelTableColumn\nghidra.util.table.field.ReferenceFromPreviewTableColumn\nghidra.util.table.field.ReferenceToAddressTableColumn\nghidra.util.table.field.ReferenceToBytesTableColumn\nghidra.util.table.field.ReferenceToPreviewTableColumn\nghidra.util.table.field.ReferenceTypeTableColumn\nghidra.util.table.field.SourceTypeTableColumn\nghidra.util.table.field.SymbolTypeTableColumn\nghidra.util.table.GhidraFilterTable\nghidra.util.table.GhidraProgramTableModel\nghidra.util.table.GhidraTable\nghidra.util.table.GhidraTableCellRenderer\nghidra.util.table.GhidraTableFilterPanel\nghidra.util.table.GhidraThreadedTablePanel\nghidra.util.table.IncomingReferencesTableModel\nghidra.util.table.MappedProgramLocationTableColumn\nghidra.util.table.mapper.AddressTableToAddressTableRowMapper\nghidra.util.table.mapper.AddressTableToProgramLocationTableRowMapper\nghidra.util.table.mapper.AddressToFunctionContainingTableRowMapper\nghidra.util.table.mapper.AddressToProgramLocationTableRowMapper\nghidra.util.table.mapper.AddressToSymbolTableRowMapper\nghidra.util.table.mapper.ProgramLocationToAddressTableRowMapper\nghidra.util.table.mapper.ProgramLocationToFunctionContainingTableRowMapper\nghidra.util.table.mapper.ProgramLocationToSymbolTableRowMapper\nghidra.util.table.mapper.ReferenceEndpointToAddressTableRowMapper\nghidra.util.table.mapper.ReferenceEndpointToFunctionTableRowMapper\nghidra.util.table.mapper.ReferenceEndpointToProgramLocationTableRowMapper\nghidra.util.table.mapper.ReferenceEndpointToReferenceTableRowMapper\nghidra.util.table.mapper.ReferenceToReferenceAddressPairTableRowMapper\nghidra.util.table.mapper.SymbolToAddressTableRowMapper\nghidra.util.table.mapper.SymbolToProgramLocationTableRowMapper\nghidra.util.table.PreviewDataTableCellRenderer\nghidra.util.table.PreviewTableCellData\nghidra.util.table.ProgramLocationTableRowMapper\nghidra.util.table.ProgramMappedTableColumn\nghidra.util.table.ProgramTableModel\nghidra.util.table.projectdata.column.AddressSizeProjectDataColumn\nghidra.util.table.projectdata.column.CompilerProjectDataColumn\nghidra.util.table.projectdata.column.CreatedWithProjectDataColumn\nghidra.util.table.projectdata.column.CreationDateProjectDataColumn\nghidra.util.table.projectdata.column.DomainFileSizeProjectDataColumn\nghidra.util.table.projectdata.column.EndianProjectDataColumn\nghidra.util.table.projectdata.column.ExecutablePathProjectDataColumn\nghidra.util.table.projectdata.column.FormatProjectDataColumn\nghidra.util.table.projectdata.column.LanguageProjectDataColumn\nghidra.util.table.projectdata.column.Md5ProjectDataColumn\nghidra.util.table.projectdata.column.ProcessorProjectDataColumn\nghidra.util.table.ReferencesFromTableModel\nghidra.util.table.SelectionNavigationAction\nghidra.util.table.TableModelLoader\nghidra.util.task.AbstractSwingUpdateManager\nghidra.util.task.BufferedSwingRunner\nghidra.util.task.BusyListener\nghidra.util.task.CachingLoader\nghidra.util.task.CachingSwingWorker\nghidra.util.task.CancelledListener\nghidra.util.task.CancelOnlyWrappingTaskMonitor\nghidra.util.task.ChompingBitsAnimationPanel\nghidra.util.task.CompoundTask\nghidra.util.task.ConsoleTaskMonitor\nghidra.util.task.DummyCancellableTaskMonitor\nghidra.util.task.HourglassAnimationPanel\nghidra.util.task.IssueListener\nghidra.util.task.MonitoredRunnable\nghidra.util.task.RunManager\nghidra.util.task.SwingRunnable\nghidra.util.task.SwingUpdateManager\nghidra.util.task.Task\nghidra.util.task.TaskBuilder\nghidra.util.task.TaskDialog\nghidra.util.task.TaskLauncher\nghidra.util.task.TaskListener\nghidra.util.task.TaskMonitor\nghidra.util.task.TaskMonitorAdapter\nghidra.util.task.TaskMonitorComponent\nghidra.util.task.TaskMonitorSplitter\nghidra.util.task.TimeoutTaskMonitor\nghidra.util.task.UnknownProgressWrappingTaskMonitor\nghidra.util.task.WrappingTaskMonitor\nghidra.util.TaskUtilities\nghidra.util.TestSuiteUtilities\nghidra.util.TestUniversalIdGenerator\nghidra.util.timer.GTimer\nghidra.util.timer.GTimerMonitor\nghidra.util.timer.Watchdog\nghidra.util.TrackedTaskListener\nghidra.util.TriConsumer\nghidra.util.UndefinedFunction\nghidra.util.UniversalID\nghidra.util.UniversalIdGenerator\nghidra.util.UserSearchUtils\nghidra.util.VersionExceptionHandler\nghidra.util.WebColors\nghidra.util.WordLocation\nghidra.util.worker.AbstractWorker\nghidra.util.worker.Job\nghidra.util.worker.PriorityJob\nghidra.util.worker.PriorityWorker\nghidra.util.worker.Worker\nghidra.util.xml.GenericXMLOutputter\nghidra.util.xml.SpecXmlUtils\nghidra.util.xml.XmlAttributeException\nghidra.util.xml.XmlAttributes\nghidra.util.xml.XmlParserElement\nghidra.util.xml.XmlTestHelper\nghidra.util.xml.XmlUtilities\nghidra.util.xml.XmlUtilities.ThrowingErrorHandler\nghidra.util.xml.XmlWriter\nghidra.util.XmlProgramUtilities\nghidra.xml.AbstractXmlPullParser\nghidra.xml.NonThreadedXmlPullParserImpl\nghidra.xml.XmlElement\nghidra.xml.XmlElementImpl\nghidra.xml.XmlException\nghidra.xml.XmlMessageLog\nghidra.xml.XmlParseException\nghidra.xml.XmlPullParser\nghidra.xml.XmlPullParserFactory\nghidra.xml.XmlTracer\nghidra.xml.XmlTreeNode\nhelp.GHelpBuilder\nhelp.HelpBuildUtils\nhelp.HelpBuildUtils.HelpFilesFilter\nhelp.HelpBuildUtils.Stringizer\nhelp.ImageLocation\nhelp.JavaHelpFilesBuilder\nhelp.JavaHelpSetBuilder\nhelp.OverlayHelpTree\nhelp.screenshot.AbstractScreenShotGenerator\nhelp.screenshot.GhidraScreenShotGenerator\nhelp.screenshot.HelpMissingScreenShotReportGenerator\nhelp.screenshot.HelpScreenShotReportGenerator\nhelp.screenshot.ImageDialogProvider\nhelp.screenshot.TutorialScreenShotGenerator\nhelp.TOCConverter\nhelp.TOCItemProvider\nhelp.validator.AnchorManager\nhelp.validator.DuplicateAnchorCollection\nhelp.validator.DuplicateAnchorCollectionByHelpFile\nhelp.validator.DuplicateAnchorCollectionByHelpTopic\nhelp.validator.HTMLFileParser\nhelp.validator.JavaHelpValidator\nhelp.validator.LinkDatabase\nhelp.validator.links.IllegalHModuleAssociationIMGInvalidLink\nhelp.validator.links.IncorrectIMGFilenameCaseInvalidLink\nhelp.validator.links.InvalidHREFLink\nhelp.validator.links.InvalidIMGLink\nhelp.validator.links.InvalidLink\nhelp.validator.links.InvalidRuntimeIMGFileInvalidLink\nhelp.validator.links.MissingAnchorInvalidLink\nhelp.validator.links.MissingFileInvalidLink\nhelp.validator.links.MissingIMGFileInvalidLink\nhelp.validator.links.MissingTOCDefinitionInvalidLink\nhelp.validator.links.MissingTOCTargetIDInvalidLink\nhelp.validator.links.NonExistentIMGFileInvalidLink\nhelp.validator.location.DirectoryHelpModuleLocation\nhelp.validator.location.HelpModuleCollection\nhelp.validator.location.HelpModuleLocation\nhelp.validator.location.JarHelpModuleLocation\nhelp.validator.model.AnchorDefinition\nhelp.validator.model.GhidraTOCFile\nhelp.validator.model.HelpFile\nhelp.validator.model.HelpTopic\nhelp.validator.model.HREF\nhelp.validator.model.IMG\nhelp.validator.model.TOCItem\nhelp.validator.model.TOCItemDefinition\nhelp.validator.model.TOCItemExternal\nhelp.validator.model.TOCItemReference\nhelp.validator.ReferenceTagProcessor\nhelp.validator.TagProcessor\nhelp.validator.UnusedHelpImageFileFinder\nInterface\njava.awt.Component\njava.awt.Container\njava.awt.datatransfer.DataFlavor\njava.awt.Dialog\njava.awt.dnd.DropTarget\njava.awt.event.MouseAdapter\njava.awt.event.MouseMotionAdapter\njava.awt.Frame\njava.awt.Graphics\njava.awt.Graphics2D\njava.awt.Window\njava.beans.PropertyChangeListener\njava.beans.PropertyEditorSupport\njava.io.Closeable\njava.io.File\njava.io.FileNotFoundException\njava.io.FilterOutputStream\njava.io.InputStream\njava.io.IOException\njava.io.OutputStream\njava.io.PrintStream\njava.io.PrintWriter\njava.io.Reader\njava.io.Serializable\njava.io.Writer\njava.lang.AutoCloseable\njava.lang.ClassLoader\njava.lang.Comparable\njava.lang.Enum\njava.lang.Error\njava.lang.Exception\njava.lang.Iterable\njava.lang.Number\njava.lang.Object\njava.lang.Object\njava.lang.ref.Reference\njava.lang.ref.WeakReference\njava.lang.Runnable\njava.lang.RuntimeException\njava.lang.Thread\njava.lang.ThreadGroup\njava.lang.Throwable\njava.math.BigInteger\njava.net.URLClassLoader\njava.net.URLConnection\njava.net.URLStreamHandler\njava.rmi.Remote\njava.security.SecureClassLoader\njava.util.AbstractCollection\njava.util.AbstractList\njava.util.AbstractMap\njava.util.AbstractSet\njava.util.ArrayList\njava.util.Collection\njava.util.Comparator\njava.util.Deque\njava.util.Dictionary\njava.util.EventListener\njava.util.EventObject\njava.util.function.Consumer\njava.util.HashMap\njava.util.HashSet\njava.util.Hashtable\njava.util.Iterator\njava.util.LinkedHashMap\njava.util.List\njava.util.Map\njava.util.Observable\njava.util.Properties\njava.util.Queue\njava.util.Set\njava.util.TreeMap\njava.util.Vector\njavax.help.DefaultHelpBroker\njavax.help.FavoritesView\njavax.help.HelpSet\njavax.help.NavigatorView\njavax.help.SearchView\njavax.help.TOCItem\njavax.help.TOCView\njavax.help.TOCView.DefaultTOCFactory\njavax.help.TreeItem\njavax.imageio.stream.ImageInputStreamImpl\njavax.net.SocketFactory\njavax.net.ssl.SSLSocketFactory\njavax.swing.AbstractAction\njavax.swing.AbstractButton\njavax.swing.AbstractCellEditor\njavax.swing.AbstractListModel\njavax.swing.AbstractSpinnerModel\njavax.swing.colorchooser.AbstractColorChooserPanel\njavax.swing.DefaultCellEditor\njavax.swing.DefaultListSelectionModel\njavax.swing.event.TableModelListener\njavax.swing.ImageIcon\njavax.swing.JButton\njavax.swing.JCheckBox\njavax.swing.JCheckBoxMenuItem\njavax.swing.JColorChooser\njavax.swing.JComboBox\njavax.swing.JComponent\njavax.swing.JDialog\njavax.swing.JEditorPane\njavax.swing.JFormattedTextField.AbstractFormatter\njavax.swing.JFormattedTextField.AbstractFormatterFactory\njavax.swing.JFrame\njavax.swing.JLabel\njavax.swing.JList\njavax.swing.JMenuItem\njavax.swing.JPanel\njavax.swing.JRadioButton\njavax.swing.JScrollBar\njavax.swing.JScrollPane\njavax.swing.JSlider\njavax.swing.JTabbedPane\njavax.swing.JTable\njavax.swing.JTextArea\njavax.swing.JTextField\njavax.swing.JTextPane\njavax.swing.JToggleButton\njavax.swing.JToolBar\njavax.swing.JWindow\njavax.swing.ListSelectionModel\njavax.swing.plaf.basic.BasicSliderUI\njavax.swing.plaf.ButtonUI\njavax.swing.plaf.ComponentUI\njavax.swing.plaf.MenuItemUI\njavax.swing.plaf.SliderUI\njavax.swing.RepaintManager\njavax.swing.table.AbstractTableModel\njavax.swing.table.JTableHeader\njavax.swing.table.TableCellRenderer\njavax.swing.table.TableModel\njavax.swing.text.AbstractDocument\njavax.swing.text.DefaultEditorKit\njavax.swing.text.DefaultFormatter\njavax.swing.text.DefaultFormatterFactory\njavax.swing.text.DefaultStyledDocument\njavax.swing.text.DocumentFilter\njavax.swing.text.EditorKit\njavax.swing.text.html.HTMLEditorKit\njavax.swing.text.InternationalFormatter\njavax.swing.text.JTextComponent\njavax.swing.text.NumberFormatter\njavax.swing.text.PlainDocument\njavax.swing.text.StyledEditorKit\njavax.swing.text.TextAction\njavax.swing.tree.DefaultMutableTreeNode\njavax.swing.tree.DefaultTreeCellEditor\njavax.swing.tree.DefaultTreeCellRenderer\njavax.swing.tree.DefaultTreeSelectionModel\njunit.framework.Assert\njunit.framework.TestCase\nlog.Log4jDevelopmentPatternConverter\nlog.LogListener\nlog.LogPanelAppender\norg.antlr.runtime.BaseRecognizer\norg.antlr.runtime.CommonToken\norg.antlr.runtime.DFA\norg.antlr.runtime.Lexer\norg.antlr.runtime.Parser\norg.antlr.runtime.ParserRuleReturnScope\norg.antlr.runtime.RuleReturnScope\norg.antlr.runtime.tree.TreeParser\norg.antlr.runtime.tree.TreeRuleReturnScope\norg.apache.commons.collections4.collection.AbstractCollectionDecorator\norg.apache.commons.collections4.list.AbstractListDecorator\norg.apache.commons.collections4.multimap.AbstractMultiValuedMap\norg.apache.commons.collections4.multimap.AbstractSetValuedMap\norg.apache.commons.collections4.set.AbstractSetDecorator\norg.apache.commons.lang3.builder.ToStringStyle\norg.apache.felix.framework.util.MultiReleaseContent\norg.apache.logging.log4j.core.AbstractLifeCycle\norg.apache.logging.log4j.core.appender.AbstractAppender\norg.apache.logging.log4j.core.filter.AbstractFilterable\norg.apache.logging.log4j.core.pattern.AbstractPatternConverter\norg.apache.logging.log4j.core.pattern.LogEventPatternConverter\norg.jdom.output.XMLOutputter\norg.jgrapht.graph.AbstractBaseGraph\norg.jgrapht.graph.AbstractGraph\norg.junit.runners.model.Statement\norg.python.util.InteractiveInterpreter\norg.python.util.PythonInterpreter\nresources.IconProvider\nresources.Icons\nresources.icons.CenterTranslateIcon\nresources.icons.ColorIcon\nresources.icons.ColorIcon3D\nresources.icons.DisabledImageIconWrapper\nresources.icons.EmptyIcon\nresources.icons.FileBasedIcon\nresources.icons.IconWrapper\nresources.icons.ImageIconWrapper\nresources.icons.OvalBackgroundColorIcon\nresources.icons.OvalColorIcon\nresources.icons.RotateIcon\nresources.icons.ScaledImageIconWrapper\nresources.icons.TranslateIcon\nresources.MultiIcon\nresources.MultiIconBuilder\nresources.QUADRANT\nresources.ResourceManager\nutil.CollectionUtils\nutil.HistoryList\nutilities.util.ArrayUtilities\nutilities.util.FileResolutionResult\nutilities.util.FileResolutionResult.FileResolutionStatus\nutilities.util.FileUtilities\nutilities.util.reflection.ReflectionUtilities\nutility.application.ApplicationLayout\nutility.application.ApplicationSettings\nutility.application.ApplicationUtilities\nutility.application.DummyApplicationLayout\nutility.function.Callback\nutility.function.Dummy\nutility.function.ExceptionalCallback\nutility.function.ExceptionalConsumer\nutility.function.ExceptionalFunction\nutility.function.TerminatingConsumer\nutility.module.ModuleManifestFile\nutility.module.ModuleUtilities\n"
  },
  {
    "path": "generate_ghidra_pyi.py",
    "content": "# Generate .pyi's for Ghidra.\n# @category: IDE Helpers\nfrom __future__ import print_function\nimport type_formatter\n\nimport ghidra\n# Make this script work with the stubs in an IDE\ntry:\n    from ghidra.ghidra_builtins import *\nexcept:\n    pass\nfrom __main__ import askDirectory, askYesNo, getGhidraVersion\n\nfrom generate_stub_package import generate_package\n\nimport class_loader\nimport type_extractor\nimport pythonscript_handler\nimport helper\n\nmy_globals = globals().copy()\n\n\ndef main():\n    # type: () -> None\n    if not helper.are_docs_available():\n        helper.extract_jsondoc()\n    try:\n        pyi_root = askDirectory('.pyi root directory', 'Select').getPath()\n        print(pyi_root)\n\n    except ghidra.util.exception.CancelledException:\n        print('Generation canceled: No output directory selected.')\n        return\n\n    class_loader.load_all_classes(prefix='ghidra.')\n\n    pythonscript_handler.create_mock(pyi_root, my_globals)\n\n    ghidra_package = type_extractor.Package.from_package(ghidra)\n    type_formatter.create_type_hints(pyi_root, ghidra_package)\n\n    package_version = \"DEV\"\n    if isRunningHeadless():\n        # We are running in an headless environment and this might be an automated CI build\n        # so we try getting an extra argument that is supposed to be the git commit tag so the package version is a combination\n        # of the ghidra version and the version of the stub generating code\n        try:\n            package_version = askString(\"Package version\", \"Please specify package version\")\n        except:\n            pass\n    generate_package(pyi_root, getGhidraVersion(), stub_version=package_version)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "generate_stub_package.py",
    "content": "import os\nimport shutil\n\n\ndef generate_package(pyi_root, ghidra_version, stub_version=\"DEV\"):\n\n    setup_code = \"\"\"\nfrom setuptools import setup\nimport os\n\ndef find_stub_files():\n    result = []\n    package = 'ghidra-stubs'\n    for root, dirs, files in os.walk(package):\n        for file in files:\n            if file.endswith('.pyi'):\n                file = os.path.relpath(os.path.join(root,file), start=package)\n                result.append(file)\n    return result\n\nsetup(name= 'ghidra-stubs',\nversion='{ghidra_version}.{stub_version}',\nauthor='Tamir Bahar',\npackages=['ghidra-stubs'],\nurl=\"https://github.com/VDOO-Connected-Trust/ghidra-pyi-generator\",\npackage_data={{'ghidra-stubs': find_stub_files()}},\nlong_description=open('README.md').read(),\nlong_description_content_type='text/markdown',\n)\n    \"\"\".format(ghidra_version=ghidra_version,\n               stub_version=stub_version)\n\n    stub_folder = os.path.join(pyi_root, 'ghidra-stubs')\n    os.rename(os.path.join(pyi_root, 'ghidra'), stub_folder)\n    shutil.copy2(os.path.join(pyi_root, 'ghidra_builtins.pyi'), stub_folder)\n    with open(os.path.join(pyi_root, 'setup.py'), 'w') as setup_file:\n        setup_file.write(setup_code)\n\n    print('Run `pip install {}` to install ghidra-stubs package'.format(pyi_root))\n"
  },
  {
    "path": "helper.py",
    "content": "from __future__ import print_function\n\nimport zipfile\nfrom collections import defaultdict\nimport json\nimport os\n\nimport attr\nfrom typing import Optional, List\n\nimport java.lang\nfrom ghidra.framework import Application\nfrom basic_type import BasicType\n\n\ndef get_jsondoc_basepath():\n    return os.path.join(\n        Application.getUserCacheDirectory().getAbsolutePath(),\n        'GhidraAPI_javadoc',\n        Application.getApplicationVersion(),\n        'api',\n    )\n\ndef extract_jsondoc():\n    zip_location = os.path.join(Application.getInstallationDirectory().getAbsolutePath(), \"docs/GhidraAPI_javadoc.zip\")\n    extract_dir = os.path.join(\n        Application.getUserCacheDirectory().getAbsolutePath(),\n        'GhidraAPI_javadoc',\n        Application.getApplicationVersion())\n\n    zip_file = zipfile.ZipFile(zip_location)\n    zip_file.extractall(extract_dir)\n\ndef are_docs_available():\n    return os.path.exists(get_jsondoc_basepath())\n\n\ndef get_jsondoc(class_name):\n    path_without_ext = os.path.join(get_jsondoc_basepath(), class_name.replace('.', '/'))\n    json_path = '{}.json'.format(path_without_ext)\n\n    try:\n        with open(json_path) as f:\n            return json.load(f)\n    except (IOError, KeyError):\n        pass\n\n\ndef json_path_to_class_name(root, name, jsondoc_basepath):\n    json_path = os.path.join(root, name)\n    class_path = os.path.relpath(json_path, jsondoc_basepath)\n    class_path_without_extension = os.path.splitext(class_path)[0]\n    class_name = class_path_without_extension.replace(os.path.sep, '.')\n    return str(class_name)\n\n\ndef get_jsondoc_classes():\n    jsondoc_basepath = get_jsondoc_basepath()\n    for root, _dirs, names in os.walk(jsondoc_basepath):\n        for name in names:\n            if name.endswith('.json'):\n                yield json_path_to_class_name(root, name, jsondoc_basepath)\n\n\n@attr.s\nclass ParamDoc(object):\n    jsondoc = attr.ib()\n\n    @property\n    def name(self):\n        return self.jsondoc['name']\n\n    @property  # NOQA: A003\n    def type(self):\n        return BasicType.from_java(self.jsondoc['type_long'])\n\n    @property\n    def comment(self):\n        return self.jsondoc['comment'].encode(\"utf8\")\n\n\nclass MethodDoc(object):\n    def __init__(self, jsondoc):\n        self.jsondoc = jsondoc\n\n    @property\n    def comment(self):\n        return self.jsondoc['comment'].encode(\"utf8\")\n\n    @property\n    def return_type(self):\n        return BasicType.from_java(self.jsondoc['return']['type_long'])\n\n    @property\n    def javadoc(self):\n        return self.jsondoc['javadoc'].encode(\"utf8\")\n\n    @property\n    def params(self):\n        return map(ParamDoc, self.jsondoc['params'])\n\n\n@attr.s\nclass OverloadSetDoc(object):\n    overloads_jsondoc = attr.ib()\n\n    @staticmethod\n    def is_matching_overload(required_args, provided_args):\n        # type: (List[BasicType], List[BasicType]) -> bool\n        if len(required_args) != len(provided_args):\n            return False\n\n        return all(\n            required.is_overload_match(provided)\n            for required, provided\n            in zip(required_args, provided_args)\n        )\n\n    def get_overload(self, param_types):\n        # type: (List[BasicType]) -> Optional[MethodDoc]\n        for overload in self.overloads_jsondoc:\n            doc_param_types = [\n                BasicType.from_java(param['type_long']) for param in overload['params']\n            ]\n            if self.is_matching_overload(doc_param_types, param_types):\n                return MethodDoc(overload)\n        return None\n\n\nclass ClassDoc(object):\n    def __init__(self, class_name):\n        self.class_name = class_name  # type: str\n        self.jsondoc = get_jsondoc(class_name)\n\n        if self.jsondoc is None:\n            raise KeyError('No docs for {}'.format(class_name))\n\n        self.methods = self._map_methods()\n\n    def _map_methods(self):\n        methods = defaultdict(list)\n        for method in self.jsondoc['methods']:\n            methods[method['name']].append(method)\n\n        return methods\n\n    @property\n    def extends_doc(self):\n        if hasattr(self, '_extends_doc'):\n            return self._extends_doc\n\n        self._extends_doc = ClassDoc(self.extends)\n        return self._extends_doc\n\n    @property\n    def implements_doc(self):\n        if hasattr(self, '_implemented_doc'):\n            return self._implemented_doc\n\n        self._implemented_doc = ClassDoc(self.extends)\n        return self._implemented_doc\n\n    @property\n    def comment(self):\n        return self.jsondoc['comment'].encode(\"utf8\")\n\n    @property\n    def extends(self):\n        return self.jsondoc.get('extends', None)\n\n    @property\n    def implements(self):\n        return self.jsondoc.get('implements', None)\n\n    @property\n    def name(self):\n        return self.jsondoc['name']\n\n    def _get_overload_set(self, name):\n        try:\n            extend_overload_set = self.extends_doc._get_overload_set(name)\n        except (java.lang.Throwable, Exception):\n            extend_overload_set = []\n\n        try:\n            implements_overload_set = self.implements_doc._get_overload_set(name)\n        except (java.lang.Throwable, Exception):\n            implements_overload_set = []\n\n        return self.methods.get(name, []) + extend_overload_set + implements_overload_set\n\n    def get_overload_set(self, name):\n        return OverloadSetDoc(self._get_overload_set(name))\n"
  },
  {
    "path": "pythonscript_handler.py",
    "content": "from __future__ import print_function\n\nimport os\n\nimport ghidra \n\ntry:\n    import ghidra.python.PythonScript as PythonScript\nexcept ImportError:\n    # 11.2 renamed everything to Jython\n    import ghidra.jython.JythonScript as PythonScript\n\nimport helper\nimport type_extractor\nimport type_formatter\nfrom type_extractor import OverloadSet\nfrom basic_type import BasicType\nfrom type_formatter import format_imports\n\n\nPYTHONSCRIPT_PROPERTIES = {\n    'currentProgram': ghidra.program.database.ProgramDB,\n    'currentAddress': ghidra.program.model.address.Address,\n    'currentLocation': ghidra.program.util.ProgramLocation,\n    'currentSelection': ghidra.program.util.ProgramSelection,\n    'currentHighlight': ghidra.program.util.ProgramSelection,\n    'monitor': ghidra.util.task.TaskMonitor,\n}\n\n\ndef format_method_arguments(argument_types):\n    return ', '.join(\n        '__a{i}: {type}'.format(i=i, type=typ.proper_name) for i, typ in enumerate(argument_types)\n    )\n\n\ndef format_overload_set(overload_set):\n    def_format = 'def {name}({args}) -> {return_type}: ...'\n    for overload in overload_set.overloads:\n        overload_code = def_format.format(\n            name=overload_set.name,\n            args=format_method_arguments(overload.argument_types),\n            return_type=overload.return_type.proper_name,\n        )\n\n        if len(overload_set.overloads) > 1:\n            overload_code = '@overload\\n' + overload_code\n        yield overload_code\n\n\ndef is_ghidra_value(value):\n    return type(value).__module__.partition('.')[0] == 'ghidra'\n\n\ndef is_ghidra_method(value):\n    return (\n        type(value).__name__ == 'instancemethod'\n        and getattr(value, 'im_class', None) == PythonScript\n    )\n\n\ndef is_instance_property(name):\n    try:\n        getattr(PythonScript, name)\n    except AttributeError as e:\n        if e.args[0].startswith('instance attr:'):\n            return True\n    return False\n\n\ndef get_type_signature(name, value):\n    if name in PYTHONSCRIPT_PROPERTIES:\n        t = BasicType.from_type(PYTHONSCRIPT_PROPERTIES[name])  # type: BasicType\n        return '{}: {}'.format(name, t.proper_name), t.requires\n\n    if is_ghidra_value(value):\n        t = BasicType.from_type(type(value))  # type: BasicType\n        return '{}: {}'.format(name, t.proper_name), t.requires\n\n    if is_ghidra_method(value):\n        overload_set = OverloadSet.from_reflected_function(value.im_func)\n        return '\\n'.join(format_overload_set(overload_set)), overload_set.requires\n\n    return None\n\n\ndef get_formatted_overload_set(overload_set):\n    return '\\n\\n'.join(type_formatter.format_overload_set(overload_set, bound=True))\n\n\ndef generate_ghidra_builtins(my_globals):\n    builtins = (ghidra.program.flatapi.FlatProgramAPI, ghidra.app.script.GhidraScript)\n    classes = [type_extractor.Class.from_class(cls) for cls in builtins]\n    imports = set().union(*(cls.requires for cls in classes))\n\n    def _format_overloads():\n        for cls, builtin in zip(classes, builtins):\n            class_name = '{}.{}'.format(builtin.__module__, builtin.__name__)\n            try:\n                docs = helper.ClassDoc(class_name)\n            except KeyError:\n                docs = None\n            cls = type_extractor.Class.from_class(builtin, docs=docs)\n            imports.update(cls.requires)\n            for overload_set in cls.methods:\n                if overload_set.name in my_globals:\n                    yield (overload_set.name, get_formatted_overload_set(overload_set))\n\n    methods = dict(_format_overloads())\n\n    for name, value in my_globals.iteritems():\n        if name in methods:\n            continue\n\n        signature = get_type_signature(name, value)\n        if signature:\n            code, requires = signature\n            imports.update(requires)\n\n            methods[name] = code\n\n    return '\\n'.join([\n        '\\n'.join(format_imports(sorted(imports))),\n        '\\n\\n',\n        '\\n\\n'.join(sorted(methods.values())),\n    ])\n\n\ndef create_mock(pyi_root, my_globals):\n    builtins = generate_ghidra_builtins(my_globals)\n    with open(os.path.join(pyi_root, 'ghidra_builtins.pyi'), 'w') as f:\n        f.write(builtins)\n"
  },
  {
    "path": "type_extractor.py",
    "content": "import keyword\nfrom collections import defaultdict\nfrom typing import List, Dict, Any, Optional, DefaultDict\n\nimport attr\nimport java.lang.reflect.Modifier\n\nfrom basic_type import BasicType\nfrom helper import ClassDoc, OverloadSetDoc, MethodDoc\n\n\ndef is_nested_class(parent, child):\n    # type: (type, type) -> bool\n    if parent.__module__ != child.__module__:\n        return False\n\n    if '$' not in child.__name__:\n        return False\n\n    child_parent_name = child.__name__.split('$')[0]\n    if child_parent_name != parent.__name__:\n        return False\n\n    return True\n\n\ndef get_members(obj):\n    # type: (Any) -> Dict[str,Any]\n    members = {}\n    for name in dir(obj):\n        try:\n            members[name] = getattr(obj, name)\n        except AttributeError:\n            # Some attrs are instance-attrs, and we can't get them via the class object.\n            pass\n        except TypeError:\n            # Some attrs are write-only, so we can't get them.\n            pass\n        except java.lang.IllegalArgumentException:\n            # Some values cannot be converted to Python types, so we are stuck.\n            pass\n        except java.lang.NoClassDefFoundError:\n            pass\n\n    # If something is in `__dict__` we want it directly from there.\n    # Attribute resolution destroys reflection info when class fields are involved.\n    members.update(obj.__dict__)\n\n    return members\n\n\ndef make_valid_name(name):\n    if keyword.iskeyword(name):\n        return '{}_'.format(name)\n    return name\n\n\ndef get_argument_names(argument_types, docs):\n    # type: (List[BasicType], Optional[OverloadSetDoc]) -> List[str]\n    if docs:\n        overload_doc = docs.get_overload(argument_types)\n        if overload_doc:\n            return [make_valid_name(param.name) for param in overload_doc.params]\n\n    return ['__a{}'.format(i) for i in range(len(argument_types))]\n\n\ndef get_return_type(return_type, docs):\n    # type: (BasicType, Optional[MethodDoc]) -> BasicType\n\n    if docs is None:\n        return return_type\n\n    return docs.return_type\n\n\n@attr.s\nclass Overload(object):\n    return_type = attr.ib()  # type: BasicType\n    argument_types = attr.ib()  # type: List[BasicType]\n    argument_names = attr.ib()  # type: List[str]\n    is_static = attr.ib()  # type: bool\n    docstring = attr.ib()  # type: Optional[str]\n\n    @staticmethod\n    def from_reflected_args(reflected_args, ctor_for=None, docs=None):\n        # type: (Any, Any, Optional[OverloadSetDoc]) -> Overload\n        if ctor_for is not None:\n            return_type = ctor_for\n        else:\n            return_type = reflected_args.method.getReturnType()\n\n        return_type = BasicType.from_type(return_type)\n        argument_types = map(BasicType.from_type, reflected_args.method.getParameterTypes())\n\n        argument_names = get_argument_names(argument_types, docs)\n\n        docstring = ''\n        if docs:\n            overload_docs = docs.get_overload(argument_types)\n            if overload_docs:\n                docstring = overload_docs.javadoc\n                argument_types = [param.type for param in overload_docs.params]\n                return_type = get_return_type(return_type, overload_docs)\n\n        return Overload(\n            return_type=return_type,\n            argument_types=argument_types,\n            argument_names=argument_names,\n            is_static=reflected_args.isStatic,\n            docstring=docstring\n        )\n\n    @property\n    def requires(self):\n        return self.return_type.requires.union(*(t.requires for t in self.argument_types))\n\n\n@attr.s\nclass OverloadSet(object):\n    name = attr.ib()\n    overloads = attr.ib()  # type: List[Overload]\n    is_constructor = attr.ib(default=False)  # type: bool\n\n    @staticmethod\n    def from_reflected_function(reflected_function, docs=None):\n        # type: (Any, Optional[OverloadSetDoc])->OverloadSet\n        def _get_overloads():\n            for reflected_args in reflected_function.argslist:\n                if reflected_args is not None:\n                    yield Overload.from_reflected_args(reflected_args, docs=docs)\n\n        return OverloadSet(name=reflected_function.__name__, overloads=list(_get_overloads()))\n\n    @staticmethod\n    def from_reflected_constructor(reflected_constructor, cls, docs=None):\n        def _get_overloads():\n            for reflected_args in reflected_constructor.argslist:\n                if reflected_args is not None:\n                    yield Overload.from_reflected_args(reflected_args, ctor_for=cls, docs=docs)\n\n        return OverloadSet(name='__init__', overloads=list(_get_overloads()), is_constructor=True)\n\n    @property\n    def requires(self):\n        requirements = set().union(*(overload.requires for overload in self.overloads))\n        if len(self.overloads) > 1:\n            requirements.add(('typing', 'overload'))\n\n        return requirements\n\n\n@attr.s\nclass Property(object):\n    name = attr.ib()\n    getter_type = attr.ib()  # type: BasicType\n    setter_type = attr.ib()  # type: BasicType\n\n    @property\n    def has_setter(self):\n        return self.setter_type is not None\n\n    @property\n    def has_getter(self):\n        return self.getter_type is not None\n\n    @staticmethod\n    def from_beanproperty(beanproperty, name):\n        if beanproperty.setMethod:\n            setter_type = beanproperty.setMethod.getParameterTypes()[0]\n            setter_type = BasicType.from_type(setter_type)\n        else:\n            setter_type = None\n\n        if beanproperty.getMethod:\n            getter_type = beanproperty.getMethod.getReturnType()\n            getter_type = BasicType.from_type(getter_type)\n        else:\n            getter_type = None\n\n        return Property(name=name, setter_type=setter_type, getter_type=getter_type)\n\n\n@attr.s\nclass Modifier(object):\n    modifiers = attr.ib()  # type: int\n\n    @property\n    def is_static(self):\n        return java.lang.reflect.Modifier.isStatic(self.modifiers)\n\n    @property\n    def is_final(self):\n        return java.lang.reflect.Modifier.isFinal(self.modifiers)\n\n\ndef pretty_repr(value):\n    # type: (Any) -> str\n    if isinstance(value, long):  # NOQA: F821\n        return hex(value)\n\n    types = [] # type: list[type]\n    types = [\n        bool,\n        float,\n        int,\n        str,\n        unicode,\n    ]\n    for t in types:\n        if isinstance(value, t):\n            return repr(value)\n\n    return ''\n\n\n@attr.s\nclass Field(object):\n    name = attr.ib()  # type: str\n    my_type = attr.ib()  # type: BasicType\n    modifiers = attr.ib()  # type: Modifier\n    value_repr = attr.ib()  # type: Optional[str]\n    has_value = attr.ib()  # type: bool\n\n    @staticmethod\n    def from_reflectedfield(reflectedfield, name, cls):\n        name = name\n        my_type = reflectedfield.field.getType()\n        modifiers = Modifier(reflectedfield.field.getModifiers())\n\n        value_repr = None\n        has_value = False\n\n        if modifiers.is_static and modifiers.is_final:\n            try:\n                value = getattr(cls, name)\n                value_repr = pretty_repr(value)\n                has_value = value_repr != ''\n            except java.lang.IllegalArgumentException:\n                pass\n\n        return Field(\n            name=name,\n            my_type=BasicType.from_type(my_type),\n            modifiers=modifiers,\n            value_repr=value_repr,\n            has_value=has_value,\n        )\n\n\n@attr.s\nclass NamedObject(object):\n    name = attr.ib()\n    obj = attr.ib()\n\n\ndef group_by_typename(items):\n    # type: (Dict[str,Any]) -> Dict[str, List[NamedObject]]\n    groups = defaultdict(list)  # type: DefaultDict[str, List[NamedObject]]\n\n    for name, obj in items.iteritems():\n        type_name = type(obj).__name__\n        groups[type_name].append(NamedObject(name=name, obj=obj))\n\n    return groups\n\n\n@attr.s\nclass Class(object):\n    name = attr.ib()\n    methods = attr.ib()  # type: List[OverloadSet]\n    constructors = attr.ib()  # type: List[OverloadSet]\n    properties = attr.ib()  # type: List[Property]\n    fields = attr.ib()  # type: List[Field]\n    nested_classes = attr.ib()  # type: List[Class]\n    is_iterable = attr.ib()  # type: bool\n    bases = attr.ib()  # type: List[BasicType]\n    docstring = attr.ib(default=None)  # type: Optional[str]\n\n    @staticmethod\n    def from_class(cls, docs=None):\n        # type: (type, Optional[ClassDoc]) -> Class\n        # TODO: Handle the following typenames:\n        #       beanevent, beaneventproperty, method_descriptor\n        member_groups = group_by_typename(get_members(cls))  # type: Dict[str, List[NamedObject]]\n\n        # Nested classes have funky names and we need to handle them.\n        name = cls.__name__.rpartition('$')[-1]\n\n        # The `__iter__` method is not in `__dict__`,\n        # and is not a reflectedfunction, so we don't have any\n        # type information on it.\n        is_iterable = hasattr(cls, '__iter__')\n\n        docstring = None\n        if docs:\n            docstring = docs.comment\n\n        methods = []\n        for nobj in member_groups['reflectedfunction']:\n            method_docs = docs.get_overload_set(nobj.name) if docs else None\n            method = OverloadSet.from_reflected_function(\n                reflected_function=nobj.obj, docs=method_docs,\n            )\n            methods.append(method)\n\n        constructors = []\n        for nobj in member_groups['reflectedconstructor']:\n            ctor_docs = docs.get_overload_set('<init>') if docs else None\n            ctor = OverloadSet.from_reflected_constructor(\n                reflected_constructor=nobj.obj, cls=cls, docs=ctor_docs,\n            )\n            constructors.append(ctor)\n\n        return Class(\n            name=name,\n            methods=methods,\n            properties=[\n                Property.from_beanproperty(beanproperty=nobj.obj, name=nobj.name)\n                for nobj in member_groups['beanproperty']\n            ],\n            constructors=constructors,\n            fields=[\n                Field.from_reflectedfield(reflectedfield=nobj.obj, name=nobj.name, cls=cls)\n                for nobj in member_groups['reflectedfield']\n            ],\n            # There is no jsondoc for nested classes,\n            # so we cannot grab it without adding HTML parsing.\n            # TODO: Use HTML parsing to populate nested class documentation.\n            nested_classes=[\n                Class.from_class(nobj.obj)\n                for nobj in member_groups['Class']\n                if is_nested_class(cls, nobj.obj)\n            ],\n            is_iterable=is_iterable,\n            bases=map(BasicType.from_type, cls.__bases__),\n            docstring=docstring\n        )\n\n    @property\n    def requires(self):\n        requirements = (\n            set()\n            .union(*(member.requires for member in self.methods))\n            .union(*(nested_class.requires for nested_class in self.nested_classes))\n            .union(*(base.requires for base in self.bases))\n        )\n        if self.is_iterable:\n            requirements.add(('typing', 'Iterator'))\n\n        return requirements\n\n\n@attr.s\nclass Package(object):\n    name = attr.ib()  # type: str\n    classes = attr.ib()  # type: List[Class]\n    packages = attr.ib()  # type: List[Package]\n\n    @staticmethod\n    def from_package(package):\n        packages = []\n        classes = []\n        for name, attr_ in get_members(package).iteritems():\n            if name == '__name__':\n                continue\n\n            typename = BasicType.from_type(type(attr_)).proper_name\n\n            if typename == 'javapackage':\n                packages.append(Package.from_package(attr_))\n\n            elif typename == 'java.lang.Class':\n                try:\n                    docs = ClassDoc('{}.{}'.format(package.__name__, name))\n                except KeyError:\n                    docs = None\n                classes.append(Class.from_class(attr_, docs=docs))\n\n        return Package(name=package.__name__, classes=classes, packages=packages)\n\n    @property\n    def requires(self):\n        return set().union(*(cls.requires for cls in self.classes))\n"
  },
  {
    "path": "type_formatter.py",
    "content": "from __future__ import print_function\n\nimport os\nfrom typing import Iterable, List, Tuple\n\nfrom type_extractor import OverloadSet, Overload, Package, Class\n\n\ndef indent(text):\n    splitted_text = text.splitlines(True)\n    prefixed_lines = (('    ' + line if line.strip() else line) for line in splitted_text)\n\n    return ''.join(prefixed_lines)\n\n\ndef format_overload_set(overload_set, bound=False):\n    # type: (OverloadSet, bool) -> Iterable[str]\n\n    def _get_format(is_ctor, has_docstring):\n        ending = ' ...'\n        if has_docstring:\n            ending = (\n                '\\n'\n                '    \"\"\"\\n'\n                '{docstring}\\n'\n                '    \"\"\"\\n'\n                '    ...'\n            )\n\n        if is_ctor:\n            def_format = 'def {name}({optional_self}{args}):' + ending\n        else:\n            def_format = 'def {name}({optional_self}{args}) -> {return_type}:' + ending\n\n        return def_format\n\n    def get_optional_self(overload):\n        # type: (Overload) -> str\n        optional_self = ''\n        if not (bound or overload.is_static and not overload_set.is_constructor):\n            optional_self = 'self'\n            if overload.argument_types:\n                optional_self += ', '\n\n        return optional_self\n\n    def get_arguments(overload):\n        # type: (Overload) -> str\n        return ', '.join(\n            '{arg_name}: {type}'.format(arg_name=arg_name, type=typ.proper_name)\n            for arg_name, typ in zip(overload.argument_names, overload.argument_types)\n        )\n\n    for overload in overload_set.overloads:\n        def_format = _get_format(overload_set.is_constructor, overload.docstring)\n        overload_code = def_format.format(\n            optional_self=get_optional_self(overload),\n            name=overload_set.name,\n            args=get_arguments(overload),\n            return_type=overload.return_type.proper_name,\n            docstring=indent(overload.docstring),\n        )\n\n        if overload.is_static and not overload_set.is_constructor and not bound:\n            overload_code = '@staticmethod\\n' + overload_code\n\n        if len(overload_set.overloads) > 1:\n            overload_code = '@overload\\n' + overload_code\n\n        yield overload_code\n\n\ndef format_imports(imports):\n    for imp in imports:\n        if isinstance(imp, str):\n            yield 'import {}'.format(imp)\n        elif isinstance(imp, tuple):\n            module, member = imp\n            yield 'from {} import {}'.format(module, member)\n\n\ndef format_pyi_class(cls, is_nested=False):\n    # type: (Class, bool) -> str\n\n    def _format_imports():\n        if is_nested:\n            return\n\n        for formatted_import in format_imports(cls.requires):\n            yield formatted_import\n\n    def _format_methods():\n        for overload_set in sorted(cls.methods):\n            for fmt in format_overload_set(overload_set):\n                yield fmt\n\n    def _format_ctors():\n        for overload_set in sorted(cls.constructors):\n            for fmt in format_overload_set(overload_set):\n                yield fmt\n\n    def _format_properties():\n        for prop in sorted(cls.properties):\n            getter = (\n                '    @property\\n'\n                '    def {name}(self) -> {getter_type}: ...{comment}'\n            ).format(\n                name=prop.name,\n                getter_type=prop.getter_type.proper_name if prop.has_getter else 'None',\n                comment='' if prop.has_getter else '  # No getter available.',\n            )\n\n            yield getter\n\n            if prop.has_setter:\n                setter = (\n                    '    @{name}.setter\\n'\n                    '    def {name}(self, value: {setter_type}) -> None: ...'\n                ).format(\n                    name=prop.name,\n                    setter_type=prop.setter_type.proper_name,\n                )\n\n                yield setter\n\n    def _format_fields():\n        for field in sorted(cls.fields):\n            declaration = '    {name}: {type}'.format(\n                name=field.name, type=field.my_type.proper_name,\n            )\n            if field.has_value:\n                assignment = ' = {}'.format(field.value_repr)\n                declaration += assignment\n            yield declaration\n\n    def _format_nested_classes():\n        for nested_class in cls.nested_classes:\n            nested_class_text = format_pyi_class(\n                nested_class,\n                is_nested=True,\n            )\n            indented_nested_class_text = indent(nested_class_text)\n            yield indented_nested_class_text\n\n    def _format_iterable():\n        if cls.is_iterable:\n            iter_obj = None\n            for method in cls.methods:\n                if method.name == 'next':\n                    iter_obj = method.overloads[0].return_type.proper_name\n                    break\n            if iter_obj is not None:\n                yield '    def __iter__(self) -> Iterator[{}]: ...'.format(iter_obj)\n            else:\n                yield '    def __iter__(self): ...'\n\n    bases = ', '.join(base.proper_name for base in cls.bases)\n    class_docs = ''\n    if cls.docstring:\n        class_docs = '    \"\"\"\\n{}\\n    \"\"\"\\n\\n'.format(indent(cls.docstring))\n\n    return (\n        '{imports}\\n\\n\\n'\n        '{class_header}\\n'\n        '{class_docs}'\n        '{fields}\\n\\n'\n        '{nested_classes}\\n\\n'\n        '{ctors}\\n\\n'\n        '{iterable}\\n\\n'\n        '{methods}\\n\\n'\n        '{properties}'\n    ).format(\n        imports='\\n'.join(sorted(_format_imports())),\n        class_header='class {name}({bases}):'.format(name=cls.name, bases=bases),\n        ctors=indent('\\n\\n'.join(_format_ctors())),\n        properties='\\n\\n'.join(_format_properties()),\n        methods=indent('\\n\\n'.join(_format_methods())),\n        fields='\\n'.join(_format_fields()),\n        nested_classes='\\n\\n'.join(_format_nested_classes()),\n        iterable='\\n\\n'.join(_format_iterable()),\n        class_docs=class_docs,\n    )\n\n\ndef write_package_classes(root, package_path, package):\n    # type: (str, str, Package) -> None\n    for cls in package.classes:\n        class_path = '{}.pyi'.format(os.path.join(root, package_path, cls.name))\n        pyi_content = format_pyi_class(cls)\n        with open(class_path, 'w') as f:\n            f.write(pyi_content)\n\n\ndef update_imports(init_path, package):\n    # type: (str, Package) -> None\n    imports = set()\n\n    if os.path.exists(init_path):\n        with open(init_path, 'r') as f:\n            imports.update(f.read().splitlines())\n\n    imports.update(\n        'from .{0} import {0} as {0}'.format(cls.name)\n        for cls in package.classes\n    )\n    imports.update(\n        'from . import {0} as {0}'.format(package.name.rpartition('.')[-1])\n        for package in package.packages\n    )\n\n    with open(init_path, 'w') as f:\n        f.write('\\n'.join(sorted(imports)))\n\n\ndef get_package_path(package):\n    # type: (Package) -> str\n    return package.name.replace('.', '/')\n\n\ndef create_package_directories(root, packages):\n    # type: (str, List[Package]) -> None\n    for package in packages:\n        package_path = get_package_path(package)\n        path = os.path.join(root, package_path)\n        if not os.path.exists(path):\n            os.makedirs(path)\n\n\ndef get_all_packages(preparsed_packages):\n    # type: (Tuple[Package, ...]) -> List[Package]\n    \"\"\"Get all packages, including nested ones\"\"\"\n    stack = list(preparsed_packages)\n    packages = []\n\n    while stack:\n        package = stack.pop()\n        packages.append(package)\n        stack.extend(package.packages)\n\n    return packages\n\n\ndef create_type_hints(root, *packages):\n    # type: (str, *Package) -> None\n    all_packages = get_all_packages(packages)\n\n    create_package_directories(root, all_packages)\n\n    for package in all_packages:\n        package_path = get_package_path(package)\n        init_path = os.path.join(root, package_path, '__init__.pyi')\n        update_imports(init_path, package)\n\n        write_package_classes(root, package_path, package)\n"
  },
  {
    "path": "vendor/attr/__init__.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nimport sys\n\nfrom functools import partial\n\nfrom . import converters, exceptions, filters, setters, validators\nfrom ._cmp import cmp_using\nfrom ._config import get_run_validators, set_run_validators\nfrom ._funcs import asdict, assoc, astuple, evolve, has, resolve_types\nfrom ._make import (\n    NOTHING,\n    Attribute,\n    Factory,\n    attrib,\n    attrs,\n    fields,\n    fields_dict,\n    make_class,\n    validate,\n)\nfrom ._version_info import VersionInfo\n\n\n__version__ = \"21.4.0\"\n__version_info__ = VersionInfo._from_version_string(__version__)\n\n__title__ = \"attrs\"\n__description__ = \"Classes Without Boilerplate\"\n__url__ = \"https://www.attrs.org/\"\n__uri__ = __url__\n__doc__ = __description__ + \" <\" + __uri__ + \">\"\n\n__author__ = \"Hynek Schlawack\"\n__email__ = \"hs@ox.cx\"\n\n__license__ = \"MIT\"\n__copyright__ = \"Copyright (c) 2015 Hynek Schlawack\"\n\n\ns = attributes = attrs\nib = attr = attrib\ndataclass = partial(attrs, auto_attribs=True)  # happy Easter ;)\n\n__all__ = [\n    \"Attribute\",\n    \"Factory\",\n    \"NOTHING\",\n    \"asdict\",\n    \"assoc\",\n    \"astuple\",\n    \"attr\",\n    \"attrib\",\n    \"attributes\",\n    \"attrs\",\n    \"cmp_using\",\n    \"converters\",\n    \"evolve\",\n    \"exceptions\",\n    \"fields\",\n    \"fields_dict\",\n    \"filters\",\n    \"get_run_validators\",\n    \"has\",\n    \"ib\",\n    \"make_class\",\n    \"resolve_types\",\n    \"s\",\n    \"set_run_validators\",\n    \"setters\",\n    \"validate\",\n    \"validators\",\n]\n\nif sys.version_info[:2] >= (3, 6):\n    from ._next_gen import define, field, frozen, mutable  # noqa: F401\n\n    __all__.extend((\"define\", \"field\", \"frozen\", \"mutable\"))\n"
  },
  {
    "path": "vendor/attr/_cmp.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nimport functools\n\nfrom ._compat import new_class\nfrom ._make import _make_ne\n\n\n_operation_names = {\"eq\": \"==\", \"lt\": \"<\", \"le\": \"<=\", \"gt\": \">\", \"ge\": \">=\"}\n\n\ndef cmp_using(\n    eq=None,\n    lt=None,\n    le=None,\n    gt=None,\n    ge=None,\n    require_same_type=True,\n    class_name=\"Comparable\",\n):\n    \"\"\"\n    Create a class that can be passed into `attr.ib`'s ``eq``, ``order``, and\n    ``cmp`` arguments to customize field comparison.\n\n    The resulting class will have a full set of ordering methods if\n    at least one of ``{lt, le, gt, ge}`` and ``eq``  are provided.\n\n    :param Optional[callable] eq: `callable` used to evaluate equality\n        of two objects.\n    :param Optional[callable] lt: `callable` used to evaluate whether\n        one object is less than another object.\n    :param Optional[callable] le: `callable` used to evaluate whether\n        one object is less than or equal to another object.\n    :param Optional[callable] gt: `callable` used to evaluate whether\n        one object is greater than another object.\n    :param Optional[callable] ge: `callable` used to evaluate whether\n        one object is greater than or equal to another object.\n\n    :param bool require_same_type: When `True`, equality and ordering methods\n        will return `NotImplemented` if objects are not of the same type.\n\n    :param Optional[str] class_name: Name of class. Defaults to 'Comparable'.\n\n    See `comparison` for more details.\n\n    .. versionadded:: 21.1.0\n    \"\"\"\n\n    body = {\n        \"__slots__\": [\"value\"],\n        \"__init__\": _make_init(),\n        \"_requirements\": [],\n        \"_is_comparable_to\": _is_comparable_to,\n    }\n\n    # Add operations.\n    num_order_functions = 0\n    has_eq_function = False\n\n    if eq is not None:\n        has_eq_function = True\n        body[\"__eq__\"] = _make_operator(\"eq\", eq)\n        body[\"__ne__\"] = _make_ne()\n\n    if lt is not None:\n        num_order_functions += 1\n        body[\"__lt__\"] = _make_operator(\"lt\", lt)\n\n    if le is not None:\n        num_order_functions += 1\n        body[\"__le__\"] = _make_operator(\"le\", le)\n\n    if gt is not None:\n        num_order_functions += 1\n        body[\"__gt__\"] = _make_operator(\"gt\", gt)\n\n    if ge is not None:\n        num_order_functions += 1\n        body[\"__ge__\"] = _make_operator(\"ge\", ge)\n\n    type_ = new_class(class_name, (object,), {}, lambda ns: ns.update(body))\n\n    # Add same type requirement.\n    if require_same_type:\n        type_._requirements.append(_check_same_type)\n\n    # Add total ordering if at least one operation was defined.\n    if 0 < num_order_functions < 4:\n        if not has_eq_function:\n            # functools.total_ordering requires __eq__ to be defined,\n            # so raise early error here to keep a nice stack.\n            raise ValueError(\n                \"eq must be define is order to complete ordering from \"\n                \"lt, le, gt, ge.\"\n            )\n        type_ = functools.total_ordering(type_)\n\n    return type_\n\n\ndef _make_init():\n    \"\"\"\n    Create __init__ method.\n    \"\"\"\n\n    def __init__(self, value):\n        \"\"\"\n        Initialize object with *value*.\n        \"\"\"\n        self.value = value\n\n    return __init__\n\n\ndef _make_operator(name, func):\n    \"\"\"\n    Create operator method.\n    \"\"\"\n\n    def method(self, other):\n        if not self._is_comparable_to(other):\n            return NotImplemented\n\n        result = func(self.value, other.value)\n        if result is NotImplemented:\n            return NotImplemented\n\n        return result\n\n    method.__name__ = \"__%s__\" % (name,)\n    method.__doc__ = \"Return a %s b.  Computed by attrs.\" % (\n        _operation_names[name],\n    )\n\n    return method\n\n\ndef _is_comparable_to(self, other):\n    \"\"\"\n    Check whether `other` is comparable to `self`.\n    \"\"\"\n    for func in self._requirements:\n        if not func(self, other):\n            return False\n    return True\n\n\ndef _check_same_type(self, other):\n    \"\"\"\n    Return True if *self* and *other* are of the same type, False otherwise.\n    \"\"\"\n    return other.value.__class__ is self.value.__class__\n"
  },
  {
    "path": "vendor/attr/_compat.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nimport platform\nimport sys\nimport threading\nimport types\nimport warnings\n\n\nPY2 = sys.version_info[0] == 2\nPYPY = platform.python_implementation() == \"PyPy\"\nPY36 = sys.version_info[:2] >= (3, 6)\nHAS_F_STRINGS = PY36\nPY310 = sys.version_info[:2] >= (3, 10)\n\n\nif PYPY or PY36:\n    ordered_dict = dict\nelse:\n    from collections import OrderedDict\n\n    ordered_dict = OrderedDict\n\n\nif PY2:\n    from collections import Mapping, Sequence\n\n    from UserDict import IterableUserDict\n\n    # We 'bundle' isclass instead of using inspect as importing inspect is\n    # fairly expensive (order of 10-15 ms for a modern machine in 2016)\n    def isclass(klass):\n        return isinstance(klass, (type, types.ClassType))\n\n    def new_class(name, bases, kwds, exec_body):\n        \"\"\"\n        A minimal stub of types.new_class that we need for make_class.\n        \"\"\"\n        ns = {}\n        exec_body(ns)\n\n        return type(name, bases, ns)\n\n    # TYPE is used in exceptions, repr(int) is different on Python 2 and 3.\n    TYPE = \"type\"\n\n    def iteritems(d):\n        return d.iteritems()\n\n    # Python 2 is bereft of a read-only dict proxy, so we make one!\n    class ReadOnlyDict(IterableUserDict):\n        \"\"\"\n        Best-effort read-only dict wrapper.\n        \"\"\"\n\n        def __setitem__(self, key, val):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise TypeError(\n                \"'mappingproxy' object does not support item assignment\"\n            )\n\n        def update(self, _):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise AttributeError(\n                \"'mappingproxy' object has no attribute 'update'\"\n            )\n\n        def __delitem__(self, _):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise TypeError(\n                \"'mappingproxy' object does not support item deletion\"\n            )\n\n        def clear(self):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise AttributeError(\n                \"'mappingproxy' object has no attribute 'clear'\"\n            )\n\n        def pop(self, key, default=None):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise AttributeError(\n                \"'mappingproxy' object has no attribute 'pop'\"\n            )\n\n        def popitem(self):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise AttributeError(\n                \"'mappingproxy' object has no attribute 'popitem'\"\n            )\n\n        def setdefault(self, key, default=None):\n            # We gently pretend we're a Python 3 mappingproxy.\n            raise AttributeError(\n                \"'mappingproxy' object has no attribute 'setdefault'\"\n            )\n\n        def __repr__(self):\n            # Override to be identical to the Python 3 version.\n            return \"mappingproxy(\" + repr(self.data) + \")\"\n\n    def metadata_proxy(d):\n        res = ReadOnlyDict()\n        res.data.update(d)  # We blocked update, so we have to do it like this.\n        return res\n\n    def just_warn(*args, **kw):  # pragma: no cover\n        \"\"\"\n        We only warn on Python 3 because we are not aware of any concrete\n        consequences of not setting the cell on Python 2.\n        \"\"\"\n\nelse:  # Python 3 and later.\n    from collections.abc import Mapping, Sequence  # noqa\n\n    def just_warn(*args, **kw):\n        \"\"\"\n        We only warn on Python 3 because we are not aware of any concrete\n        consequences of not setting the cell on Python 2.\n        \"\"\"\n        warnings.warn(\n            \"Running interpreter doesn't sufficiently support code object \"\n            \"introspection.  Some features like bare super() or accessing \"\n            \"__class__ will not work with slotted classes.\",\n            RuntimeWarning,\n            stacklevel=2,\n        )\n\n    def isclass(klass):\n        return isinstance(klass, type)\n\n    TYPE = \"class\"\n\n    def iteritems(d):\n        return d.items()\n\n    new_class = types.new_class\n\n    def metadata_proxy(d):\n        return types.MappingProxyType(dict(d))\n\n\ndef make_set_closure_cell():\n    \"\"\"Return a function of two arguments (cell, value) which sets\n    the value stored in the closure cell `cell` to `value`.\n    \"\"\"\n    # pypy makes this easy. (It also supports the logic below, but\n    # why not do the easy/fast thing?)\n    if PYPY:\n\n        def set_closure_cell(cell, value):\n            cell.__setstate__((value,))\n\n        return set_closure_cell\n\n    # Otherwise gotta do it the hard way.\n\n    # Create a function that will set its first cellvar to `value`.\n    def set_first_cellvar_to(value):\n        x = value\n        return\n\n        # This function will be eliminated as dead code, but\n        # not before its reference to `x` forces `x` to be\n        # represented as a closure cell rather than a local.\n        def force_x_to_be_a_cell():  # pragma: no cover\n            return x\n\n    try:\n        # Extract the code object and make sure our assumptions about\n        # the closure behavior are correct.\n        if PY2:\n            co = set_first_cellvar_to.func_code\n        else:\n            co = set_first_cellvar_to.__code__\n        if co.co_cellvars != (\"x\",) or co.co_freevars != ():\n            raise AssertionError  # pragma: no cover\n\n        # Convert this code object to a code object that sets the\n        # function's first _freevar_ (not cellvar) to the argument.\n        if sys.version_info >= (3, 8):\n            # CPython 3.8+ has an incompatible CodeType signature\n            # (added a posonlyargcount argument) but also added\n            # CodeType.replace() to do this without counting parameters.\n            set_first_freevar_code = co.replace(\n                co_cellvars=co.co_freevars, co_freevars=co.co_cellvars\n            )\n        else:\n            args = [co.co_argcount]\n            if not PY2:\n                args.append(co.co_kwonlyargcount)\n            args.extend(\n                [\n                    co.co_nlocals,\n                    co.co_stacksize,\n                    co.co_flags,\n                    co.co_code,\n                    co.co_consts,\n                    co.co_names,\n                    co.co_varnames,\n                    co.co_filename,\n                    co.co_name,\n                    co.co_firstlineno,\n                    co.co_lnotab,\n                    # These two arguments are reversed:\n                    co.co_cellvars,\n                    co.co_freevars,\n                ]\n            )\n            set_first_freevar_code = types.CodeType(*args)\n\n        def set_closure_cell(cell, value):\n            # Create a function using the set_first_freevar_code,\n            # whose first closure cell is `cell`. Calling it will\n            # change the value of that cell.\n            setter = types.FunctionType(\n                set_first_freevar_code, {}, \"setter\", (), (cell,)\n            )\n            # And call it to set the cell.\n            setter(value)\n\n        # Make sure it works on this interpreter:\n        def make_func_with_cell():\n            x = None\n\n            def func():\n                return x  # pragma: no cover\n\n            return func\n\n        if PY2:\n            cell = make_func_with_cell().func_closure[0]\n        else:\n            cell = make_func_with_cell().__closure__[0]\n        set_closure_cell(cell, 100)\n        if cell.cell_contents != 100:\n            raise AssertionError  # pragma: no cover\n\n    except Exception:\n        return just_warn\n    else:\n        return set_closure_cell\n\n\nset_closure_cell = make_set_closure_cell()\n\n# Thread-local global to track attrs instances which are already being repr'd.\n# This is needed because there is no other (thread-safe) way to pass info\n# about the instances that are already being repr'd through the call stack\n# in order to ensure we don't perform infinite recursion.\n#\n# For instance, if an instance contains a dict which contains that instance,\n# we need to know that we're already repr'ing the outside instance from within\n# the dict's repr() call.\n#\n# This lives here rather than in _make.py so that the functions in _make.py\n# don't have a direct reference to the thread-local in their globals dict.\n# If they have such a reference, it breaks cloudpickle.\nrepr_context = threading.local()\n"
  },
  {
    "path": "vendor/attr/_config.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\n\n__all__ = [\"set_run_validators\", \"get_run_validators\"]\n\n_run_validators = True\n\n\ndef set_run_validators(run):\n    \"\"\"\n    Set whether or not validators are run.  By default, they are run.\n\n    .. deprecated:: 21.3.0 It will not be removed, but it also will not be\n        moved to new ``attrs`` namespace. Use `attrs.validators.set_disabled()`\n        instead.\n    \"\"\"\n    if not isinstance(run, bool):\n        raise TypeError(\"'run' must be bool.\")\n    global _run_validators\n    _run_validators = run\n\n\ndef get_run_validators():\n    \"\"\"\n    Return whether or not validators are run.\n\n    .. deprecated:: 21.3.0 It will not be removed, but it also will not be\n        moved to new ``attrs`` namespace. Use `attrs.validators.get_disabled()`\n        instead.\n    \"\"\"\n    return _run_validators\n"
  },
  {
    "path": "vendor/attr/_funcs.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nimport copy\n\nfrom ._compat import iteritems\nfrom ._make import NOTHING, _obj_setattr, fields\nfrom .exceptions import AttrsAttributeNotFoundError\n\n\ndef asdict(\n    inst,\n    recurse=True,\n    filter=None,\n    dict_factory=dict,\n    retain_collection_types=False,\n    value_serializer=None,\n):\n    \"\"\"\n    Return the ``attrs`` attribute values of *inst* as a dict.\n\n    Optionally recurse into other ``attrs``-decorated classes.\n\n    :param inst: Instance of an ``attrs``-decorated class.\n    :param bool recurse: Recurse into classes that are also\n        ``attrs``-decorated.\n    :param callable filter: A callable whose return code determines whether an\n        attribute or element is included (``True``) or dropped (``False``).  Is\n        called with the `attrs.Attribute` as the first argument and the\n        value as the second argument.\n    :param callable dict_factory: A callable to produce dictionaries from.  For\n        example, to produce ordered dictionaries instead of normal Python\n        dictionaries, pass in ``collections.OrderedDict``.\n    :param bool retain_collection_types: Do not convert to ``list`` when\n        encountering an attribute whose type is ``tuple`` or ``set``.  Only\n        meaningful if ``recurse`` is ``True``.\n    :param Optional[callable] value_serializer: A hook that is called for every\n        attribute or dict key/value.  It receives the current instance, field\n        and value and must return the (updated) value.  The hook is run *after*\n        the optional *filter* has been applied.\n\n    :rtype: return type of *dict_factory*\n\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    ..  versionadded:: 16.0.0 *dict_factory*\n    ..  versionadded:: 16.1.0 *retain_collection_types*\n    ..  versionadded:: 20.3.0 *value_serializer*\n    ..  versionadded:: 21.3.0 If a dict has a collection for a key, it is\n        serialized as a tuple.\n    \"\"\"\n    attrs = fields(inst.__class__)\n    rv = dict_factory()\n    for a in attrs:\n        v = getattr(inst, a.name)\n        if filter is not None and not filter(a, v):\n            continue\n\n        if value_serializer is not None:\n            v = value_serializer(inst, a, v)\n\n        if recurse is True:\n            if has(v.__class__):\n                rv[a.name] = asdict(\n                    v,\n                    recurse=True,\n                    filter=filter,\n                    dict_factory=dict_factory,\n                    retain_collection_types=retain_collection_types,\n                    value_serializer=value_serializer,\n                )\n            elif isinstance(v, (tuple, list, set, frozenset)):\n                cf = v.__class__ if retain_collection_types is True else list\n                rv[a.name] = cf(\n                    [\n                        _asdict_anything(\n                            i,\n                            is_key=False,\n                            filter=filter,\n                            dict_factory=dict_factory,\n                            retain_collection_types=retain_collection_types,\n                            value_serializer=value_serializer,\n                        )\n                        for i in v\n                    ]\n                )\n            elif isinstance(v, dict):\n                df = dict_factory\n                rv[a.name] = df(\n                    (\n                        _asdict_anything(\n                            kk,\n                            is_key=True,\n                            filter=filter,\n                            dict_factory=df,\n                            retain_collection_types=retain_collection_types,\n                            value_serializer=value_serializer,\n                        ),\n                        _asdict_anything(\n                            vv,\n                            is_key=False,\n                            filter=filter,\n                            dict_factory=df,\n                            retain_collection_types=retain_collection_types,\n                            value_serializer=value_serializer,\n                        ),\n                    )\n                    for kk, vv in iteritems(v)\n                )\n            else:\n                rv[a.name] = v\n        else:\n            rv[a.name] = v\n    return rv\n\n\ndef _asdict_anything(\n    val,\n    is_key,\n    filter,\n    dict_factory,\n    retain_collection_types,\n    value_serializer,\n):\n    \"\"\"\n    ``asdict`` only works on attrs instances, this works on anything.\n    \"\"\"\n    if getattr(val.__class__, \"__attrs_attrs__\", None) is not None:\n        # Attrs class.\n        rv = asdict(\n            val,\n            recurse=True,\n            filter=filter,\n            dict_factory=dict_factory,\n            retain_collection_types=retain_collection_types,\n            value_serializer=value_serializer,\n        )\n    elif isinstance(val, (tuple, list, set, frozenset)):\n        if retain_collection_types is True:\n            cf = val.__class__\n        elif is_key:\n            cf = tuple\n        else:\n            cf = list\n\n        rv = cf(\n            [\n                _asdict_anything(\n                    i,\n                    is_key=False,\n                    filter=filter,\n                    dict_factory=dict_factory,\n                    retain_collection_types=retain_collection_types,\n                    value_serializer=value_serializer,\n                )\n                for i in val\n            ]\n        )\n    elif isinstance(val, dict):\n        df = dict_factory\n        rv = df(\n            (\n                _asdict_anything(\n                    kk,\n                    is_key=True,\n                    filter=filter,\n                    dict_factory=df,\n                    retain_collection_types=retain_collection_types,\n                    value_serializer=value_serializer,\n                ),\n                _asdict_anything(\n                    vv,\n                    is_key=False,\n                    filter=filter,\n                    dict_factory=df,\n                    retain_collection_types=retain_collection_types,\n                    value_serializer=value_serializer,\n                ),\n            )\n            for kk, vv in iteritems(val)\n        )\n    else:\n        rv = val\n        if value_serializer is not None:\n            rv = value_serializer(None, None, rv)\n\n    return rv\n\n\ndef astuple(\n    inst,\n    recurse=True,\n    filter=None,\n    tuple_factory=tuple,\n    retain_collection_types=False,\n):\n    \"\"\"\n    Return the ``attrs`` attribute values of *inst* as a tuple.\n\n    Optionally recurse into other ``attrs``-decorated classes.\n\n    :param inst: Instance of an ``attrs``-decorated class.\n    :param bool recurse: Recurse into classes that are also\n        ``attrs``-decorated.\n    :param callable filter: A callable whose return code determines whether an\n        attribute or element is included (``True``) or dropped (``False``).  Is\n        called with the `attrs.Attribute` as the first argument and the\n        value as the second argument.\n    :param callable tuple_factory: A callable to produce tuples from.  For\n        example, to produce lists instead of tuples.\n    :param bool retain_collection_types: Do not convert to ``list``\n        or ``dict`` when encountering an attribute which type is\n        ``tuple``, ``dict`` or ``set``.  Only meaningful if ``recurse`` is\n        ``True``.\n\n    :rtype: return type of *tuple_factory*\n\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    ..  versionadded:: 16.2.0\n    \"\"\"\n    attrs = fields(inst.__class__)\n    rv = []\n    retain = retain_collection_types  # Very long. :/\n    for a in attrs:\n        v = getattr(inst, a.name)\n        if filter is not None and not filter(a, v):\n            continue\n        if recurse is True:\n            if has(v.__class__):\n                rv.append(\n                    astuple(\n                        v,\n                        recurse=True,\n                        filter=filter,\n                        tuple_factory=tuple_factory,\n                        retain_collection_types=retain,\n                    )\n                )\n            elif isinstance(v, (tuple, list, set, frozenset)):\n                cf = v.__class__ if retain is True else list\n                rv.append(\n                    cf(\n                        [\n                            astuple(\n                                j,\n                                recurse=True,\n                                filter=filter,\n                                tuple_factory=tuple_factory,\n                                retain_collection_types=retain,\n                            )\n                            if has(j.__class__)\n                            else j\n                            for j in v\n                        ]\n                    )\n                )\n            elif isinstance(v, dict):\n                df = v.__class__ if retain is True else dict\n                rv.append(\n                    df(\n                        (\n                            astuple(\n                                kk,\n                                tuple_factory=tuple_factory,\n                                retain_collection_types=retain,\n                            )\n                            if has(kk.__class__)\n                            else kk,\n                            astuple(\n                                vv,\n                                tuple_factory=tuple_factory,\n                                retain_collection_types=retain,\n                            )\n                            if has(vv.__class__)\n                            else vv,\n                        )\n                        for kk, vv in iteritems(v)\n                    )\n                )\n            else:\n                rv.append(v)\n        else:\n            rv.append(v)\n\n    return rv if tuple_factory is list else tuple_factory(rv)\n\n\ndef has(cls):\n    \"\"\"\n    Check whether *cls* is a class with ``attrs`` attributes.\n\n    :param type cls: Class to introspect.\n    :raise TypeError: If *cls* is not a class.\n\n    :rtype: bool\n    \"\"\"\n    return getattr(cls, \"__attrs_attrs__\", None) is not None\n\n\ndef assoc(inst, **changes):\n    \"\"\"\n    Copy *inst* and apply *changes*.\n\n    :param inst: Instance of a class with ``attrs`` attributes.\n    :param changes: Keyword changes in the new copy.\n\n    :return: A copy of inst with *changes* incorporated.\n\n    :raise attr.exceptions.AttrsAttributeNotFoundError: If *attr_name* couldn't\n        be found on *cls*.\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    ..  deprecated:: 17.1.0\n        Use `attrs.evolve` instead if you can.\n        This function will not be removed du to the slightly different approach\n        compared to `attrs.evolve`.\n    \"\"\"\n    import warnings\n\n    warnings.warn(\n        \"assoc is deprecated and will be removed after 2018/01.\",\n        DeprecationWarning,\n        stacklevel=2,\n    )\n    new = copy.copy(inst)\n    attrs = fields(inst.__class__)\n    for k, v in iteritems(changes):\n        a = getattr(attrs, k, NOTHING)\n        if a is NOTHING:\n            raise AttrsAttributeNotFoundError(\n                \"{k} is not an attrs attribute on {cl}.\".format(\n                    k=k, cl=new.__class__\n                )\n            )\n        _obj_setattr(new, k, v)\n    return new\n\n\ndef evolve(inst, **changes):\n    \"\"\"\n    Create a new instance, based on *inst* with *changes* applied.\n\n    :param inst: Instance of a class with ``attrs`` attributes.\n    :param changes: Keyword changes in the new copy.\n\n    :return: A copy of inst with *changes* incorporated.\n\n    :raise TypeError: If *attr_name* couldn't be found in the class\n        ``__init__``.\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    ..  versionadded:: 17.1.0\n    \"\"\"\n    cls = inst.__class__\n    attrs = fields(cls)\n    for a in attrs:\n        if not a.init:\n            continue\n        attr_name = a.name  # To deal with private attributes.\n        init_name = attr_name if attr_name[0] != \"_\" else attr_name[1:]\n        if init_name not in changes:\n            changes[init_name] = getattr(inst, attr_name)\n\n    return cls(**changes)\n\n\ndef resolve_types(cls, globalns=None, localns=None, attribs=None):\n    \"\"\"\n    Resolve any strings and forward annotations in type annotations.\n\n    This is only required if you need concrete types in `Attribute`'s *type*\n    field. In other words, you don't need to resolve your types if you only\n    use them for static type checking.\n\n    With no arguments, names will be looked up in the module in which the class\n    was created. If this is not what you want, e.g. if the name only exists\n    inside a method, you may pass *globalns* or *localns* to specify other\n    dictionaries in which to look up these names. See the docs of\n    `typing.get_type_hints` for more details.\n\n    :param type cls: Class to resolve.\n    :param Optional[dict] globalns: Dictionary containing global variables.\n    :param Optional[dict] localns: Dictionary containing local variables.\n    :param Optional[list] attribs: List of attribs for the given class.\n        This is necessary when calling from inside a ``field_transformer``\n        since *cls* is not an ``attrs`` class yet.\n\n    :raise TypeError: If *cls* is not a class.\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class and you didn't pass any attribs.\n    :raise NameError: If types cannot be resolved because of missing variables.\n\n    :returns: *cls* so you can use this function also as a class decorator.\n        Please note that you have to apply it **after** `attrs.define`. That\n        means the decorator has to come in the line **before** `attrs.define`.\n\n    ..  versionadded:: 20.1.0\n    ..  versionadded:: 21.1.0 *attribs*\n\n    \"\"\"\n    # Since calling get_type_hints is expensive we cache whether we've\n    # done it already.\n    if getattr(cls, \"__attrs_types_resolved__\", None) != cls:\n        import typing\n\n        hints = typing.get_type_hints(cls, globalns=globalns, localns=localns)\n        for field in fields(cls) if attribs is None else attribs:\n            if field.name in hints:\n                # Since fields have been frozen we must work around it.\n                _obj_setattr(field, \"type\", hints[field.name])\n        # We store the class we resolved so that subclasses know they haven't\n        # been resolved.\n        cls.__attrs_types_resolved__ = cls\n\n    # Return the class so you can use it as a decorator too.\n    return cls\n"
  },
  {
    "path": "vendor/attr/_make.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nimport copy\nimport inspect\nimport linecache\nimport sys\nimport warnings\n\nfrom operator import itemgetter\n\n# We need to import _compat itself in addition to the _compat members to avoid\n# having the thread-local in the globals here.\nfrom . import _compat, _config, setters\nfrom ._compat import (\n    HAS_F_STRINGS,\n    PY2,\n    PY310,\n    PYPY,\n    isclass,\n    iteritems,\n    metadata_proxy,\n    new_class,\n    ordered_dict,\n    set_closure_cell,\n)\nfrom .exceptions import (\n    DefaultAlreadySetError,\n    FrozenInstanceError,\n    NotAnAttrsClassError,\n    PythonTooOldError,\n    UnannotatedAttributeError,\n)\n\n\nif not PY2:\n    import typing\n\n\n# This is used at least twice, so cache it here.\n_obj_setattr = object.__setattr__\n_init_converter_pat = \"__attr_converter_%s\"\n_init_factory_pat = \"__attr_factory_{}\"\n_tuple_property_pat = (\n    \"    {attr_name} = _attrs_property(_attrs_itemgetter({index}))\"\n)\n_classvar_prefixes = (\n    \"typing.ClassVar\",\n    \"t.ClassVar\",\n    \"ClassVar\",\n    \"typing_extensions.ClassVar\",\n)\n# we don't use a double-underscore prefix because that triggers\n# name mangling when trying to create a slot for the field\n# (when slots=True)\n_hash_cache_field = \"_attrs_cached_hash\"\n\n_empty_metadata_singleton = metadata_proxy({})\n\n# Unique object for unequivocal getattr() defaults.\n_sentinel = object()\n\n_ng_default_on_setattr = setters.pipe(setters.convert, setters.validate)\n\n\nclass _Nothing(object):\n    \"\"\"\n    Sentinel class to indicate the lack of a value when ``None`` is ambiguous.\n\n    ``_Nothing`` is a singleton. There is only ever one of it.\n\n    .. versionchanged:: 21.1.0 ``bool(NOTHING)`` is now False.\n    \"\"\"\n\n    _singleton = None\n\n    def __new__(cls):\n        if _Nothing._singleton is None:\n            _Nothing._singleton = super(_Nothing, cls).__new__(cls)\n        return _Nothing._singleton\n\n    def __repr__(self):\n        return \"NOTHING\"\n\n    def __bool__(self):\n        return False\n\n    def __len__(self):\n        return 0  # __bool__ for Python 2\n\n\nNOTHING = _Nothing()\n\"\"\"\nSentinel to indicate the lack of a value when ``None`` is ambiguous.\n\"\"\"\n\n\nclass _CacheHashWrapper(int):\n    \"\"\"\n    An integer subclass that pickles / copies as None\n\n    This is used for non-slots classes with ``cache_hash=True``, to avoid\n    serializing a potentially (even likely) invalid hash value. Since ``None``\n    is the default value for uncalculated hashes, whenever this is copied,\n    the copy's value for the hash should automatically reset.\n\n    See GH #613 for more details.\n    \"\"\"\n\n    if PY2:\n        # For some reason `type(None)` isn't callable in Python 2, but we don't\n        # actually need a constructor for None objects, we just need any\n        # available function that returns None.\n        def __reduce__(self, _none_constructor=getattr, _args=(0, \"\", None)):\n            return _none_constructor, _args\n\n    else:\n\n        def __reduce__(self, _none_constructor=type(None), _args=()):\n            return _none_constructor, _args\n\n\ndef attrib(\n    default=NOTHING,\n    validator=None,\n    repr=True,\n    cmp=None,\n    hash=None,\n    init=True,\n    metadata=None,\n    type=None,\n    converter=None,\n    factory=None,\n    kw_only=False,\n    eq=None,\n    order=None,\n    on_setattr=None,\n):\n    \"\"\"\n    Create a new attribute on a class.\n\n    ..  warning::\n\n        Does *not* do anything unless the class is also decorated with\n        `attr.s`!\n\n    :param default: A value that is used if an ``attrs``-generated ``__init__``\n        is used and no value is passed while instantiating or the attribute is\n        excluded using ``init=False``.\n\n        If the value is an instance of `attrs.Factory`, its callable will be\n        used to construct a new value (useful for mutable data types like lists\n        or dicts).\n\n        If a default is not set (or set manually to `attrs.NOTHING`), a value\n        *must* be supplied when instantiating; otherwise a `TypeError`\n        will be raised.\n\n        The default can also be set using decorator notation as shown below.\n\n    :type default: Any value\n\n    :param callable factory: Syntactic sugar for\n        ``default=attr.Factory(factory)``.\n\n    :param validator: `callable` that is called by ``attrs``-generated\n        ``__init__`` methods after the instance has been initialized.  They\n        receive the initialized instance, the :func:`~attrs.Attribute`, and the\n        passed value.\n\n        The return value is *not* inspected so the validator has to throw an\n        exception itself.\n\n        If a `list` is passed, its items are treated as validators and must\n        all pass.\n\n        Validators can be globally disabled and re-enabled using\n        `get_run_validators`.\n\n        The validator can also be set using decorator notation as shown below.\n\n    :type validator: `callable` or a `list` of `callable`\\\\ s.\n\n    :param repr: Include this attribute in the generated ``__repr__``\n        method. If ``True``, include the attribute; if ``False``, omit it. By\n        default, the built-in ``repr()`` function is used. To override how the\n        attribute value is formatted, pass a ``callable`` that takes a single\n        value and returns a string. Note that the resulting string is used\n        as-is, i.e. it will be used directly *instead* of calling ``repr()``\n        (the default).\n    :type repr: a `bool` or a `callable` to use a custom function.\n\n    :param eq: If ``True`` (default), include this attribute in the\n        generated ``__eq__`` and ``__ne__`` methods that check two instances\n        for equality. To override how the attribute value is compared,\n        pass a ``callable`` that takes a single value and returns the value\n        to be compared.\n    :type eq: a `bool` or a `callable`.\n\n    :param order: If ``True`` (default), include this attributes in the\n        generated ``__lt__``, ``__le__``, ``__gt__`` and ``__ge__`` methods.\n        To override how the attribute value is ordered,\n        pass a ``callable`` that takes a single value and returns the value\n        to be ordered.\n    :type order: a `bool` or a `callable`.\n\n    :param cmp: Setting *cmp* is equivalent to setting *eq* and *order* to the\n        same value. Must not be mixed with *eq* or *order*.\n    :type cmp: a `bool` or a `callable`.\n\n    :param Optional[bool] hash: Include this attribute in the generated\n        ``__hash__`` method.  If ``None`` (default), mirror *eq*'s value.  This\n        is the correct behavior according the Python spec.  Setting this value\n        to anything else than ``None`` is *discouraged*.\n    :param bool init: Include this attribute in the generated ``__init__``\n        method.  It is possible to set this to ``False`` and set a default\n        value.  In that case this attributed is unconditionally initialized\n        with the specified default value or factory.\n    :param callable converter: `callable` that is called by\n        ``attrs``-generated ``__init__`` methods to convert attribute's value\n        to the desired format.  It is given the passed-in value, and the\n        returned value will be used as the new value of the attribute.  The\n        value is converted before being passed to the validator, if any.\n    :param metadata: An arbitrary mapping, to be used by third-party\n        components.  See `extending_metadata`.\n    :param type: The type of the attribute.  In Python 3.6 or greater, the\n        preferred method to specify the type is using a variable annotation\n        (see `PEP 526 <https://www.python.org/dev/peps/pep-0526/>`_).\n        This argument is provided for backward compatibility.\n        Regardless of the approach used, the type will be stored on\n        ``Attribute.type``.\n\n        Please note that ``attrs`` doesn't do anything with this metadata by\n        itself. You can use it as part of your own code or for\n        `static type checking <types>`.\n    :param kw_only: Make this attribute keyword-only (Python 3+)\n        in the generated ``__init__`` (if ``init`` is ``False``, this\n        parameter is ignored).\n    :param on_setattr: Allows to overwrite the *on_setattr* setting from\n        `attr.s`. If left `None`, the *on_setattr* value from `attr.s` is used.\n        Set to `attrs.setters.NO_OP` to run **no** `setattr` hooks for this\n        attribute -- regardless of the setting in `attr.s`.\n    :type on_setattr: `callable`, or a list of callables, or `None`, or\n        `attrs.setters.NO_OP`\n\n    .. versionadded:: 15.2.0 *convert*\n    .. versionadded:: 16.3.0 *metadata*\n    .. versionchanged:: 17.1.0 *validator* can be a ``list`` now.\n    .. versionchanged:: 17.1.0\n       *hash* is ``None`` and therefore mirrors *eq* by default.\n    .. versionadded:: 17.3.0 *type*\n    .. deprecated:: 17.4.0 *convert*\n    .. versionadded:: 17.4.0 *converter* as a replacement for the deprecated\n       *convert* to achieve consistency with other noun-based arguments.\n    .. versionadded:: 18.1.0\n       ``factory=f`` is syntactic sugar for ``default=attr.Factory(f)``.\n    .. versionadded:: 18.2.0 *kw_only*\n    .. versionchanged:: 19.2.0 *convert* keyword argument removed.\n    .. versionchanged:: 19.2.0 *repr* also accepts a custom callable.\n    .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01.\n    .. versionadded:: 19.2.0 *eq* and *order*\n    .. versionadded:: 20.1.0 *on_setattr*\n    .. versionchanged:: 20.3.0 *kw_only* backported to Python 2\n    .. versionchanged:: 21.1.0\n       *eq*, *order*, and *cmp* also accept a custom callable\n    .. versionchanged:: 21.1.0 *cmp* undeprecated\n    \"\"\"\n    eq, eq_key, order, order_key = _determine_attrib_eq_order(\n        cmp, eq, order, True\n    )\n\n    if hash is not None and hash is not True and hash is not False:\n        raise TypeError(\n            \"Invalid value for hash.  Must be True, False, or None.\"\n        )\n\n    if factory is not None:\n        if default is not NOTHING:\n            raise ValueError(\n                \"The `default` and `factory` arguments are mutually \"\n                \"exclusive.\"\n            )\n        if not callable(factory):\n            raise ValueError(\"The `factory` argument must be a callable.\")\n        default = Factory(factory)\n\n    if metadata is None:\n        metadata = {}\n\n    # Apply syntactic sugar by auto-wrapping.\n    if isinstance(on_setattr, (list, tuple)):\n        on_setattr = setters.pipe(*on_setattr)\n\n    if validator and isinstance(validator, (list, tuple)):\n        validator = and_(*validator)\n\n    if converter and isinstance(converter, (list, tuple)):\n        converter = pipe(*converter)\n\n    return _CountingAttr(\n        default=default,\n        validator=validator,\n        repr=repr,\n        cmp=None,\n        hash=hash,\n        init=init,\n        converter=converter,\n        metadata=metadata,\n        type=type,\n        kw_only=kw_only,\n        eq=eq,\n        eq_key=eq_key,\n        order=order,\n        order_key=order_key,\n        on_setattr=on_setattr,\n    )\n\n\ndef _compile_and_eval(script, globs, locs=None, filename=\"\"):\n    \"\"\"\n    \"Exec\" the script with the given global (globs) and local (locs) variables.\n    \"\"\"\n    bytecode = compile(script, filename, \"exec\")\n    eval(bytecode, globs, locs)\n\n\ndef _make_method(name, script, filename, globs=None):\n    \"\"\"\n    Create the method with the script given and return the method object.\n    \"\"\"\n    locs = {}\n    if globs is None:\n        globs = {}\n\n    # In order of debuggers like PDB being able to step through the code,\n    # we add a fake linecache entry.\n    count = 1\n    base_filename = filename\n    while True:\n        linecache_tuple = (\n            len(script),\n            None,\n            script.splitlines(True),\n            filename,\n        )\n        old_val = linecache.cache.setdefault(filename, linecache_tuple)\n        if old_val == linecache_tuple:\n            break\n        else:\n            filename = \"{}-{}>\".format(base_filename[:-1], count)\n            count += 1\n\n    _compile_and_eval(script, globs, locs, filename)\n\n    return locs[name]\n\n\ndef _make_attr_tuple_class(cls_name, attr_names):\n    \"\"\"\n    Create a tuple subclass to hold `Attribute`s for an `attrs` class.\n\n    The subclass is a bare tuple with properties for names.\n\n    class MyClassAttributes(tuple):\n        __slots__ = ()\n        x = property(itemgetter(0))\n    \"\"\"\n    attr_class_name = \"{}Attributes\".format(cls_name)\n    attr_class_template = [\n        \"class {}(tuple):\".format(attr_class_name),\n        \"    __slots__ = ()\",\n    ]\n    if attr_names:\n        for i, attr_name in enumerate(attr_names):\n            attr_class_template.append(\n                _tuple_property_pat.format(index=i, attr_name=attr_name)\n            )\n    else:\n        attr_class_template.append(\"    pass\")\n    globs = {\"_attrs_itemgetter\": itemgetter, \"_attrs_property\": property}\n    _compile_and_eval(\"\\n\".join(attr_class_template), globs)\n    return globs[attr_class_name]\n\n\n# Tuple class for extracted attributes from a class definition.\n# `base_attrs` is a subset of `attrs`.\n_Attributes = _make_attr_tuple_class(\n    \"_Attributes\",\n    [\n        # all attributes to build dunder methods for\n        \"attrs\",\n        # attributes that have been inherited\n        \"base_attrs\",\n        # map inherited attributes to their originating classes\n        \"base_attrs_map\",\n    ],\n)\n\n\ndef _is_class_var(annot):\n    \"\"\"\n    Check whether *annot* is a typing.ClassVar.\n\n    The string comparison hack is used to avoid evaluating all string\n    annotations which would put attrs-based classes at a performance\n    disadvantage compared to plain old classes.\n    \"\"\"\n    annot = str(annot)\n\n    # Annotation can be quoted.\n    if annot.startswith((\"'\", '\"')) and annot.endswith((\"'\", '\"')):\n        annot = annot[1:-1]\n\n    return annot.startswith(_classvar_prefixes)\n\n\ndef _has_own_attribute(cls, attrib_name):\n    \"\"\"\n    Check whether *cls* defines *attrib_name* (and doesn't just inherit it).\n\n    Requires Python 3.\n    \"\"\"\n    attr = getattr(cls, attrib_name, _sentinel)\n    if attr is _sentinel:\n        return False\n\n    for base_cls in cls.__mro__[1:]:\n        a = getattr(base_cls, attrib_name, None)\n        if attr is a:\n            return False\n\n    return True\n\n\ndef _get_annotations(cls):\n    \"\"\"\n    Get annotations for *cls*.\n    \"\"\"\n    if _has_own_attribute(cls, \"__annotations__\"):\n        return cls.__annotations__\n\n    return {}\n\n\ndef _counter_getter(e):\n    \"\"\"\n    Key function for sorting to avoid re-creating a lambda for every class.\n    \"\"\"\n    return e[1].counter\n\n\ndef _collect_base_attrs(cls, taken_attr_names):\n    \"\"\"\n    Collect attr.ibs from base classes of *cls*, except *taken_attr_names*.\n    \"\"\"\n    base_attrs = []\n    base_attr_map = {}  # A dictionary of base attrs to their classes.\n\n    # Traverse the MRO and collect attributes.\n    for base_cls in reversed(cls.__mro__[1:-1]):\n        for a in getattr(base_cls, \"__attrs_attrs__\", []):\n            if a.inherited or a.name in taken_attr_names:\n                continue\n\n            a = a.evolve(inherited=True)\n            base_attrs.append(a)\n            base_attr_map[a.name] = base_cls\n\n    # For each name, only keep the freshest definition i.e. the furthest at the\n    # back.  base_attr_map is fine because it gets overwritten with every new\n    # instance.\n    filtered = []\n    seen = set()\n    for a in reversed(base_attrs):\n        if a.name in seen:\n            continue\n        filtered.insert(0, a)\n        seen.add(a.name)\n\n    return filtered, base_attr_map\n\n\ndef _collect_base_attrs_broken(cls, taken_attr_names):\n    \"\"\"\n    Collect attr.ibs from base classes of *cls*, except *taken_attr_names*.\n\n    N.B. *taken_attr_names* will be mutated.\n\n    Adhere to the old incorrect behavior.\n\n    Notably it collects from the front and considers inherited attributes which\n    leads to the buggy behavior reported in #428.\n    \"\"\"\n    base_attrs = []\n    base_attr_map = {}  # A dictionary of base attrs to their classes.\n\n    # Traverse the MRO and collect attributes.\n    for base_cls in cls.__mro__[1:-1]:\n        for a in getattr(base_cls, \"__attrs_attrs__\", []):\n            if a.name in taken_attr_names:\n                continue\n\n            a = a.evolve(inherited=True)\n            taken_attr_names.add(a.name)\n            base_attrs.append(a)\n            base_attr_map[a.name] = base_cls\n\n    return base_attrs, base_attr_map\n\n\ndef _transform_attrs(\n    cls, these, auto_attribs, kw_only, collect_by_mro, field_transformer\n):\n    \"\"\"\n    Transform all `_CountingAttr`s on a class into `Attribute`s.\n\n    If *these* is passed, use that and don't look for them on the class.\n\n    *collect_by_mro* is True, collect them in the correct MRO order, otherwise\n    use the old -- incorrect -- order.  See #428.\n\n    Return an `_Attributes`.\n    \"\"\"\n    cd = cls.__dict__\n    anns = _get_annotations(cls)\n\n    if these is not None:\n        ca_list = [(name, ca) for name, ca in iteritems(these)]\n\n        if not isinstance(these, ordered_dict):\n            ca_list.sort(key=_counter_getter)\n    elif auto_attribs is True:\n        ca_names = {\n            name\n            for name, attr in cd.items()\n            if isinstance(attr, _CountingAttr)\n        }\n        ca_list = []\n        annot_names = set()\n        for attr_name, type in anns.items():\n            if _is_class_var(type):\n                continue\n            annot_names.add(attr_name)\n            a = cd.get(attr_name, NOTHING)\n\n            if not isinstance(a, _CountingAttr):\n                if a is NOTHING:\n                    a = attrib()\n                else:\n                    a = attrib(default=a)\n            ca_list.append((attr_name, a))\n\n        unannotated = ca_names - annot_names\n        if len(unannotated) > 0:\n            raise UnannotatedAttributeError(\n                \"The following `attr.ib`s lack a type annotation: \"\n                + \", \".join(\n                    sorted(unannotated, key=lambda n: cd.get(n).counter)\n                )\n                + \".\"\n            )\n    else:\n        ca_list = sorted(\n            (\n                (name, attr)\n                for name, attr in cd.items()\n                if isinstance(attr, _CountingAttr)\n            ),\n            key=lambda e: e[1].counter,\n        )\n\n    own_attrs = [\n        Attribute.from_counting_attr(\n            name=attr_name, ca=ca, type=anns.get(attr_name)\n        )\n        for attr_name, ca in ca_list\n    ]\n\n    if collect_by_mro:\n        base_attrs, base_attr_map = _collect_base_attrs(\n            cls, {a.name for a in own_attrs}\n        )\n    else:\n        base_attrs, base_attr_map = _collect_base_attrs_broken(\n            cls, {a.name for a in own_attrs}\n        )\n\n    if kw_only:\n        own_attrs = [a.evolve(kw_only=True) for a in own_attrs]\n        base_attrs = [a.evolve(kw_only=True) for a in base_attrs]\n\n    attrs = base_attrs + own_attrs\n\n    # Mandatory vs non-mandatory attr order only matters when they are part of\n    # the __init__ signature and when they aren't kw_only (which are moved to\n    # the end and can be mandatory or non-mandatory in any order, as they will\n    # be specified as keyword args anyway). Check the order of those attrs:\n    had_default = False\n    for a in (a for a in attrs if a.init is not False and a.kw_only is False):\n        if had_default is True and a.default is NOTHING:\n            raise ValueError(\n                \"No mandatory attributes allowed after an attribute with a \"\n                \"default value or factory.  Attribute in question: %r\" % (a,)\n            )\n\n        if had_default is False and a.default is not NOTHING:\n            had_default = True\n\n    if field_transformer is not None:\n        attrs = field_transformer(cls, attrs)\n\n    # Create AttrsClass *after* applying the field_transformer since it may\n    # add or remove attributes!\n    attr_names = [a.name for a in attrs]\n    AttrsClass = _make_attr_tuple_class(cls.__name__, attr_names)\n\n    return _Attributes((AttrsClass(attrs), base_attrs, base_attr_map))\n\n\nif PYPY:\n\n    def _frozen_setattrs(self, name, value):\n        \"\"\"\n        Attached to frozen classes as __setattr__.\n        \"\"\"\n        if isinstance(self, BaseException) and name in (\n            \"__cause__\",\n            \"__context__\",\n        ):\n            BaseException.__setattr__(self, name, value)\n            return\n\n        raise FrozenInstanceError()\n\nelse:\n\n    def _frozen_setattrs(self, name, value):\n        \"\"\"\n        Attached to frozen classes as __setattr__.\n        \"\"\"\n        raise FrozenInstanceError()\n\n\ndef _frozen_delattrs(self, name):\n    \"\"\"\n    Attached to frozen classes as __delattr__.\n    \"\"\"\n    raise FrozenInstanceError()\n\n\nclass _ClassBuilder(object):\n    \"\"\"\n    Iteratively build *one* class.\n    \"\"\"\n\n    __slots__ = (\n        \"_attr_names\",\n        \"_attrs\",\n        \"_base_attr_map\",\n        \"_base_names\",\n        \"_cache_hash\",\n        \"_cls\",\n        \"_cls_dict\",\n        \"_delete_attribs\",\n        \"_frozen\",\n        \"_has_pre_init\",\n        \"_has_post_init\",\n        \"_is_exc\",\n        \"_on_setattr\",\n        \"_slots\",\n        \"_weakref_slot\",\n        \"_wrote_own_setattr\",\n        \"_has_custom_setattr\",\n    )\n\n    def __init__(\n        self,\n        cls,\n        these,\n        slots,\n        frozen,\n        weakref_slot,\n        getstate_setstate,\n        auto_attribs,\n        kw_only,\n        cache_hash,\n        is_exc,\n        collect_by_mro,\n        on_setattr,\n        has_custom_setattr,\n        field_transformer,\n    ):\n        attrs, base_attrs, base_map = _transform_attrs(\n            cls,\n            these,\n            auto_attribs,\n            kw_only,\n            collect_by_mro,\n            field_transformer,\n        )\n\n        self._cls = cls\n        self._cls_dict = dict(cls.__dict__) if slots else {}\n        self._attrs = attrs\n        self._base_names = set(a.name for a in base_attrs)\n        self._base_attr_map = base_map\n        self._attr_names = tuple(a.name for a in attrs)\n        self._slots = slots\n        self._frozen = frozen\n        self._weakref_slot = weakref_slot\n        self._cache_hash = cache_hash\n        self._has_pre_init = bool(getattr(cls, \"__attrs_pre_init__\", False))\n        self._has_post_init = bool(getattr(cls, \"__attrs_post_init__\", False))\n        self._delete_attribs = not bool(these)\n        self._is_exc = is_exc\n        self._on_setattr = on_setattr\n\n        self._has_custom_setattr = has_custom_setattr\n        self._wrote_own_setattr = False\n\n        self._cls_dict[\"__attrs_attrs__\"] = self._attrs\n\n        if frozen:\n            self._cls_dict[\"__setattr__\"] = _frozen_setattrs\n            self._cls_dict[\"__delattr__\"] = _frozen_delattrs\n\n            self._wrote_own_setattr = True\n        elif on_setattr in (\n            _ng_default_on_setattr,\n            setters.validate,\n            setters.convert,\n        ):\n            has_validator = has_converter = False\n            for a in attrs:\n                if a.validator is not None:\n                    has_validator = True\n                if a.converter is not None:\n                    has_converter = True\n\n                if has_validator and has_converter:\n                    break\n            if (\n                (\n                    on_setattr == _ng_default_on_setattr\n                    and not (has_validator or has_converter)\n                )\n                or (on_setattr == setters.validate and not has_validator)\n                or (on_setattr == setters.convert and not has_converter)\n            ):\n                # If class-level on_setattr is set to convert + validate, but\n                # there's no field to convert or validate, pretend like there's\n                # no on_setattr.\n                self._on_setattr = None\n\n        if getstate_setstate:\n            (\n                self._cls_dict[\"__getstate__\"],\n                self._cls_dict[\"__setstate__\"],\n            ) = self._make_getstate_setstate()\n\n    def __repr__(self):\n        return \"<_ClassBuilder(cls={cls})>\".format(cls=self._cls.__name__)\n\n    def build_class(self):\n        \"\"\"\n        Finalize class based on the accumulated configuration.\n\n        Builder cannot be used after calling this method.\n        \"\"\"\n        if self._slots is True:\n            return self._create_slots_class()\n        else:\n            return self._patch_original_class()\n\n    def _patch_original_class(self):\n        \"\"\"\n        Apply accumulated methods and return the class.\n        \"\"\"\n        cls = self._cls\n        base_names = self._base_names\n\n        # Clean class of attribute definitions (`attr.ib()`s).\n        if self._delete_attribs:\n            for name in self._attr_names:\n                if (\n                    name not in base_names\n                    and getattr(cls, name, _sentinel) is not _sentinel\n                ):\n                    try:\n                        delattr(cls, name)\n                    except AttributeError:\n                        # This can happen if a base class defines a class\n                        # variable and we want to set an attribute with the\n                        # same name by using only a type annotation.\n                        pass\n\n        # Attach our dunder methods.\n        for name, value in self._cls_dict.items():\n            setattr(cls, name, value)\n\n        # If we've inherited an attrs __setattr__ and don't write our own,\n        # reset it to object's.\n        if not self._wrote_own_setattr and getattr(\n            cls, \"__attrs_own_setattr__\", False\n        ):\n            cls.__attrs_own_setattr__ = False\n\n            if not self._has_custom_setattr:\n                cls.__setattr__ = object.__setattr__\n\n        return cls\n\n    def _create_slots_class(self):\n        \"\"\"\n        Build and return a new class with a `__slots__` attribute.\n        \"\"\"\n        cd = {\n            k: v\n            for k, v in iteritems(self._cls_dict)\n            if k not in tuple(self._attr_names) + (\"__dict__\", \"__weakref__\")\n        }\n\n        # If our class doesn't have its own implementation of __setattr__\n        # (either from the user or by us), check the bases, if one of them has\n        # an attrs-made __setattr__, that needs to be reset. We don't walk the\n        # MRO because we only care about our immediate base classes.\n        # XXX: This can be confused by subclassing a slotted attrs class with\n        # XXX: a non-attrs class and subclass the resulting class with an attrs\n        # XXX: class.  See `test_slotted_confused` for details.  For now that's\n        # XXX: OK with us.\n        if not self._wrote_own_setattr:\n            cd[\"__attrs_own_setattr__\"] = False\n\n            if not self._has_custom_setattr:\n                for base_cls in self._cls.__bases__:\n                    if base_cls.__dict__.get(\"__attrs_own_setattr__\", False):\n                        cd[\"__setattr__\"] = object.__setattr__\n                        break\n\n        # Traverse the MRO to collect existing slots\n        # and check for an existing __weakref__.\n        existing_slots = dict()\n        weakref_inherited = False\n        for base_cls in self._cls.__mro__[1:-1]:\n            if base_cls.__dict__.get(\"__weakref__\", None) is not None:\n                weakref_inherited = True\n            existing_slots.update(\n                {\n                    name: getattr(base_cls, name)\n                    for name in getattr(base_cls, \"__slots__\", [])\n                }\n            )\n\n        base_names = set(self._base_names)\n\n        names = self._attr_names\n        if (\n            self._weakref_slot\n            and \"__weakref__\" not in getattr(self._cls, \"__slots__\", ())\n            and \"__weakref__\" not in names\n            and not weakref_inherited\n        ):\n            names += (\"__weakref__\",)\n\n        # We only add the names of attributes that aren't inherited.\n        # Setting __slots__ to inherited attributes wastes memory.\n        slot_names = [name for name in names if name not in base_names]\n        # There are slots for attributes from current class\n        # that are defined in parent classes.\n        # As their descriptors may be overriden by a child class,\n        # we collect them here and update the class dict\n        reused_slots = {\n            slot: slot_descriptor\n            for slot, slot_descriptor in iteritems(existing_slots)\n            if slot in slot_names\n        }\n        slot_names = [name for name in slot_names if name not in reused_slots]\n        cd.update(reused_slots)\n        if self._cache_hash:\n            slot_names.append(_hash_cache_field)\n        cd[\"__slots__\"] = tuple(slot_names)\n\n        qualname = getattr(self._cls, \"__qualname__\", None)\n        if qualname is not None:\n            cd[\"__qualname__\"] = qualname\n\n        # Create new class based on old class and our methods.\n        cls = type(self._cls)(self._cls.__name__, self._cls.__bases__, cd)\n\n        # The following is a fix for\n        # <https://github.com/python-attrs/attrs/issues/102>.  On Python 3,\n        # if a method mentions `__class__` or uses the no-arg super(), the\n        # compiler will bake a reference to the class in the method itself\n        # as `method.__closure__`.  Since we replace the class with a\n        # clone, we rewrite these references so it keeps working.\n        for item in cls.__dict__.values():\n            if isinstance(item, (classmethod, staticmethod)):\n                # Class- and staticmethods hide their functions inside.\n                # These might need to be rewritten as well.\n                closure_cells = getattr(item.__func__, \"__closure__\", None)\n            elif isinstance(item, property):\n                # Workaround for property `super()` shortcut (PY3-only).\n                # There is no universal way for other descriptors.\n                closure_cells = getattr(item.fget, \"__closure__\", None)\n            else:\n                closure_cells = getattr(item, \"__closure__\", None)\n\n            if not closure_cells:  # Catch None or the empty list.\n                continue\n            for cell in closure_cells:\n                try:\n                    match = cell.cell_contents is self._cls\n                except ValueError:  # ValueError: Cell is empty\n                    pass\n                else:\n                    if match:\n                        set_closure_cell(cell, cls)\n\n        return cls\n\n    def add_repr(self, ns):\n        self._cls_dict[\"__repr__\"] = self._add_method_dunders(\n            _make_repr(self._attrs, ns, self._cls)\n        )\n        return self\n\n    def add_str(self):\n        repr = self._cls_dict.get(\"__repr__\")\n        if repr is None:\n            raise ValueError(\n                \"__str__ can only be generated if a __repr__ exists.\"\n            )\n\n        def __str__(self):\n            return self.__repr__()\n\n        self._cls_dict[\"__str__\"] = self._add_method_dunders(__str__)\n        return self\n\n    def _make_getstate_setstate(self):\n        \"\"\"\n        Create custom __setstate__ and __getstate__ methods.\n        \"\"\"\n        # __weakref__ is not writable.\n        state_attr_names = tuple(\n            an for an in self._attr_names if an != \"__weakref__\"\n        )\n\n        def slots_getstate(self):\n            \"\"\"\n            Automatically created by attrs.\n            \"\"\"\n            return tuple(getattr(self, name) for name in state_attr_names)\n\n        hash_caching_enabled = self._cache_hash\n\n        def slots_setstate(self, state):\n            \"\"\"\n            Automatically created by attrs.\n            \"\"\"\n            __bound_setattr = _obj_setattr.__get__(self, Attribute)\n            for name, value in zip(state_attr_names, state):\n                __bound_setattr(name, value)\n\n            # The hash code cache is not included when the object is\n            # serialized, but it still needs to be initialized to None to\n            # indicate that the first call to __hash__ should be a cache\n            # miss.\n            if hash_caching_enabled:\n                __bound_setattr(_hash_cache_field, None)\n\n        return slots_getstate, slots_setstate\n\n    def make_unhashable(self):\n        self._cls_dict[\"__hash__\"] = None\n        return self\n\n    def add_hash(self):\n        self._cls_dict[\"__hash__\"] = self._add_method_dunders(\n            _make_hash(\n                self._cls,\n                self._attrs,\n                frozen=self._frozen,\n                cache_hash=self._cache_hash,\n            )\n        )\n\n        return self\n\n    def add_init(self):\n        self._cls_dict[\"__init__\"] = self._add_method_dunders(\n            _make_init(\n                self._cls,\n                self._attrs,\n                self._has_pre_init,\n                self._has_post_init,\n                self._frozen,\n                self._slots,\n                self._cache_hash,\n                self._base_attr_map,\n                self._is_exc,\n                self._on_setattr,\n                attrs_init=False,\n            )\n        )\n\n        return self\n\n    def add_match_args(self):\n        self._cls_dict[\"__match_args__\"] = tuple(\n            field.name\n            for field in self._attrs\n            if field.init and not field.kw_only\n        )\n\n    def add_attrs_init(self):\n        self._cls_dict[\"__attrs_init__\"] = self._add_method_dunders(\n            _make_init(\n                self._cls,\n                self._attrs,\n                self._has_pre_init,\n                self._has_post_init,\n                self._frozen,\n                self._slots,\n                self._cache_hash,\n                self._base_attr_map,\n                self._is_exc,\n                self._on_setattr,\n                attrs_init=True,\n            )\n        )\n\n        return self\n\n    def add_eq(self):\n        cd = self._cls_dict\n\n        cd[\"__eq__\"] = self._add_method_dunders(\n            _make_eq(self._cls, self._attrs)\n        )\n        cd[\"__ne__\"] = self._add_method_dunders(_make_ne())\n\n        return self\n\n    def add_order(self):\n        cd = self._cls_dict\n\n        cd[\"__lt__\"], cd[\"__le__\"], cd[\"__gt__\"], cd[\"__ge__\"] = (\n            self._add_method_dunders(meth)\n            for meth in _make_order(self._cls, self._attrs)\n        )\n\n        return self\n\n    def add_setattr(self):\n        if self._frozen:\n            return self\n\n        sa_attrs = {}\n        for a in self._attrs:\n            on_setattr = a.on_setattr or self._on_setattr\n            if on_setattr and on_setattr is not setters.NO_OP:\n                sa_attrs[a.name] = a, on_setattr\n\n        if not sa_attrs:\n            return self\n\n        if self._has_custom_setattr:\n            # We need to write a __setattr__ but there already is one!\n            raise ValueError(\n                \"Can't combine custom __setattr__ with on_setattr hooks.\"\n            )\n\n        # docstring comes from _add_method_dunders\n        def __setattr__(self, name, val):\n            try:\n                a, hook = sa_attrs[name]\n            except KeyError:\n                nval = val\n            else:\n                nval = hook(self, a, val)\n\n            _obj_setattr(self, name, nval)\n\n        self._cls_dict[\"__attrs_own_setattr__\"] = True\n        self._cls_dict[\"__setattr__\"] = self._add_method_dunders(__setattr__)\n        self._wrote_own_setattr = True\n\n        return self\n\n    def _add_method_dunders(self, method):\n        \"\"\"\n        Add __module__ and __qualname__ to a *method* if possible.\n        \"\"\"\n        try:\n            method.__module__ = self._cls.__module__\n        except AttributeError:\n            pass\n\n        try:\n            method.__qualname__ = \".\".join(\n                (self._cls.__qualname__, method.__name__)\n            )\n        except AttributeError:\n            pass\n\n        try:\n            method.__doc__ = \"Method generated by attrs for class %s.\" % (\n                self._cls.__qualname__,\n            )\n        except AttributeError:\n            pass\n\n        return method\n\n\n_CMP_DEPRECATION = (\n    \"The usage of `cmp` is deprecated and will be removed on or after \"\n    \"2021-06-01.  Please use `eq` and `order` instead.\"\n)\n\n\ndef _determine_attrs_eq_order(cmp, eq, order, default_eq):\n    \"\"\"\n    Validate the combination of *cmp*, *eq*, and *order*. Derive the effective\n    values of eq and order.  If *eq* is None, set it to *default_eq*.\n    \"\"\"\n    if cmp is not None and any((eq is not None, order is not None)):\n        raise ValueError(\"Don't mix `cmp` with `eq' and `order`.\")\n\n    # cmp takes precedence due to bw-compatibility.\n    if cmp is not None:\n        return cmp, cmp\n\n    # If left None, equality is set to the specified default and ordering\n    # mirrors equality.\n    if eq is None:\n        eq = default_eq\n\n    if order is None:\n        order = eq\n\n    if eq is False and order is True:\n        raise ValueError(\"`order` can only be True if `eq` is True too.\")\n\n    return eq, order\n\n\ndef _determine_attrib_eq_order(cmp, eq, order, default_eq):\n    \"\"\"\n    Validate the combination of *cmp*, *eq*, and *order*. Derive the effective\n    values of eq and order.  If *eq* is None, set it to *default_eq*.\n    \"\"\"\n    if cmp is not None and any((eq is not None, order is not None)):\n        raise ValueError(\"Don't mix `cmp` with `eq' and `order`.\")\n\n    def decide_callable_or_boolean(value):\n        \"\"\"\n        Decide whether a key function is used.\n        \"\"\"\n        if callable(value):\n            value, key = True, value\n        else:\n            key = None\n        return value, key\n\n    # cmp takes precedence due to bw-compatibility.\n    if cmp is not None:\n        cmp, cmp_key = decide_callable_or_boolean(cmp)\n        return cmp, cmp_key, cmp, cmp_key\n\n    # If left None, equality is set to the specified default and ordering\n    # mirrors equality.\n    if eq is None:\n        eq, eq_key = default_eq, None\n    else:\n        eq, eq_key = decide_callable_or_boolean(eq)\n\n    if order is None:\n        order, order_key = eq, eq_key\n    else:\n        order, order_key = decide_callable_or_boolean(order)\n\n    if eq is False and order is True:\n        raise ValueError(\"`order` can only be True if `eq` is True too.\")\n\n    return eq, eq_key, order, order_key\n\n\ndef _determine_whether_to_implement(\n    cls, flag, auto_detect, dunders, default=True\n):\n    \"\"\"\n    Check whether we should implement a set of methods for *cls*.\n\n    *flag* is the argument passed into @attr.s like 'init', *auto_detect* the\n    same as passed into @attr.s and *dunders* is a tuple of attribute names\n    whose presence signal that the user has implemented it themselves.\n\n    Return *default* if no reason for either for or against is found.\n\n    auto_detect must be False on Python 2.\n    \"\"\"\n    if flag is True or flag is False:\n        return flag\n\n    if flag is None and auto_detect is False:\n        return default\n\n    # Logically, flag is None and auto_detect is True here.\n    for dunder in dunders:\n        if _has_own_attribute(cls, dunder):\n            return False\n\n    return default\n\n\ndef attrs(\n    maybe_cls=None,\n    these=None,\n    repr_ns=None,\n    repr=None,\n    cmp=None,\n    hash=None,\n    init=None,\n    slots=False,\n    frozen=False,\n    weakref_slot=True,\n    str=False,\n    auto_attribs=False,\n    kw_only=False,\n    cache_hash=False,\n    auto_exc=False,\n    eq=None,\n    order=None,\n    auto_detect=False,\n    collect_by_mro=False,\n    getstate_setstate=None,\n    on_setattr=None,\n    field_transformer=None,\n    match_args=True,\n):\n    r\"\"\"\n    A class decorator that adds `dunder\n    <https://wiki.python.org/moin/DunderAlias>`_\\ -methods according to the\n    specified attributes using `attr.ib` or the *these* argument.\n\n    :param these: A dictionary of name to `attr.ib` mappings.  This is\n        useful to avoid the definition of your attributes within the class body\n        because you can't (e.g. if you want to add ``__repr__`` methods to\n        Django models) or don't want to.\n\n        If *these* is not ``None``, ``attrs`` will *not* search the class body\n        for attributes and will *not* remove any attributes from it.\n\n        If *these* is an ordered dict (`dict` on Python 3.6+,\n        `collections.OrderedDict` otherwise), the order is deduced from\n        the order of the attributes inside *these*.  Otherwise the order\n        of the definition of the attributes is used.\n\n    :type these: `dict` of `str` to `attr.ib`\n\n    :param str repr_ns: When using nested classes, there's no way in Python 2\n        to automatically detect that.  Therefore it's possible to set the\n        namespace explicitly for a more meaningful ``repr`` output.\n    :param bool auto_detect: Instead of setting the *init*, *repr*, *eq*,\n        *order*, and *hash* arguments explicitly, assume they are set to\n        ``True`` **unless any** of the involved methods for one of the\n        arguments is implemented in the *current* class (i.e. it is *not*\n        inherited from some base class).\n\n        So for example by implementing ``__eq__`` on a class yourself,\n        ``attrs`` will deduce ``eq=False`` and will create *neither*\n        ``__eq__`` *nor* ``__ne__`` (but Python classes come with a sensible\n        ``__ne__`` by default, so it *should* be enough to only implement\n        ``__eq__`` in most cases).\n\n        .. warning::\n\n           If you prevent ``attrs`` from creating the ordering methods for you\n           (``order=False``, e.g. by implementing ``__le__``), it becomes\n           *your* responsibility to make sure its ordering is sound. The best\n           way is to use the `functools.total_ordering` decorator.\n\n\n        Passing ``True`` or ``False`` to *init*, *repr*, *eq*, *order*,\n        *cmp*, or *hash* overrides whatever *auto_detect* would determine.\n\n        *auto_detect* requires Python 3. Setting it ``True`` on Python 2 raises\n        an `attrs.exceptions.PythonTooOldError`.\n\n    :param bool repr: Create a ``__repr__`` method with a human readable\n        representation of ``attrs`` attributes..\n    :param bool str: Create a ``__str__`` method that is identical to\n        ``__repr__``.  This is usually not necessary except for\n        `Exception`\\ s.\n    :param Optional[bool] eq: If ``True`` or ``None`` (default), add ``__eq__``\n        and ``__ne__`` methods that check two instances for equality.\n\n        They compare the instances as if they were tuples of their ``attrs``\n        attributes if and only if the types of both classes are *identical*!\n    :param Optional[bool] order: If ``True``, add ``__lt__``, ``__le__``,\n        ``__gt__``, and ``__ge__`` methods that behave like *eq* above and\n        allow instances to be ordered. If ``None`` (default) mirror value of\n        *eq*.\n    :param Optional[bool] cmp: Setting *cmp* is equivalent to setting *eq*\n        and *order* to the same value. Must not be mixed with *eq* or *order*.\n    :param Optional[bool] hash: If ``None`` (default), the ``__hash__`` method\n        is generated according how *eq* and *frozen* are set.\n\n        1. If *both* are True, ``attrs`` will generate a ``__hash__`` for you.\n        2. If *eq* is True and *frozen* is False, ``__hash__`` will be set to\n           None, marking it unhashable (which it is).\n        3. If *eq* is False, ``__hash__`` will be left untouched meaning the\n           ``__hash__`` method of the base class will be used (if base class is\n           ``object``, this means it will fall back to id-based hashing.).\n\n        Although not recommended, you can decide for yourself and force\n        ``attrs`` to create one (e.g. if the class is immutable even though you\n        didn't freeze it programmatically) by passing ``True`` or not.  Both of\n        these cases are rather special and should be used carefully.\n\n        See our documentation on `hashing`, Python's documentation on\n        `object.__hash__`, and the `GitHub issue that led to the default \\\n        behavior <https://github.com/python-attrs/attrs/issues/136>`_ for more\n        details.\n    :param bool init: Create a ``__init__`` method that initializes the\n        ``attrs`` attributes. Leading underscores are stripped for the argument\n        name. If a ``__attrs_pre_init__`` method exists on the class, it will\n        be called before the class is initialized. If a ``__attrs_post_init__``\n        method exists on the class, it will be called after the class is fully\n        initialized.\n\n        If ``init`` is ``False``, an ``__attrs_init__`` method will be\n        injected instead. This allows you to define a custom ``__init__``\n        method that can do pre-init work such as ``super().__init__()``,\n        and then call ``__attrs_init__()`` and ``__attrs_post_init__()``.\n    :param bool slots: Create a `slotted class <slotted classes>` that's more\n        memory-efficient. Slotted classes are generally superior to the default\n        dict classes, but have some gotchas you should know about, so we\n        encourage you to read the `glossary entry <slotted classes>`.\n    :param bool frozen: Make instances immutable after initialization.  If\n        someone attempts to modify a frozen instance,\n        `attr.exceptions.FrozenInstanceError` is raised.\n\n        .. note::\n\n            1. This is achieved by installing a custom ``__setattr__`` method\n               on your class, so you can't implement your own.\n\n            2. True immutability is impossible in Python.\n\n            3. This *does* have a minor a runtime performance `impact\n               <how-frozen>` when initializing new instances.  In other words:\n               ``__init__`` is slightly slower with ``frozen=True``.\n\n            4. If a class is frozen, you cannot modify ``self`` in\n               ``__attrs_post_init__`` or a self-written ``__init__``. You can\n               circumvent that limitation by using\n               ``object.__setattr__(self, \"attribute_name\", value)``.\n\n            5. Subclasses of a frozen class are frozen too.\n\n    :param bool weakref_slot: Make instances weak-referenceable.  This has no\n        effect unless ``slots`` is also enabled.\n    :param bool auto_attribs: If ``True``, collect `PEP 526`_-annotated\n        attributes (Python 3.6 and later only) from the class body.\n\n        In this case, you **must** annotate every field.  If ``attrs``\n        encounters a field that is set to an `attr.ib` but lacks a type\n        annotation, an `attr.exceptions.UnannotatedAttributeError` is\n        raised.  Use ``field_name: typing.Any = attr.ib(...)`` if you don't\n        want to set a type.\n\n        If you assign a value to those attributes (e.g. ``x: int = 42``), that\n        value becomes the default value like if it were passed using\n        ``attr.ib(default=42)``.  Passing an instance of `attrs.Factory` also\n        works as expected in most cases (see warning below).\n\n        Attributes annotated as `typing.ClassVar`, and attributes that are\n        neither annotated nor set to an `attr.ib` are **ignored**.\n\n        .. warning::\n           For features that use the attribute name to create decorators (e.g.\n           `validators <validators>`), you still *must* assign `attr.ib` to\n           them. Otherwise Python will either not find the name or try to use\n           the default value to call e.g. ``validator`` on it.\n\n           These errors can be quite confusing and probably the most common bug\n           report on our bug tracker.\n\n        .. _`PEP 526`: https://www.python.org/dev/peps/pep-0526/\n    :param bool kw_only: Make all attributes keyword-only (Python 3+)\n        in the generated ``__init__`` (if ``init`` is ``False``, this\n        parameter is ignored).\n    :param bool cache_hash: Ensure that the object's hash code is computed\n        only once and stored on the object.  If this is set to ``True``,\n        hashing must be either explicitly or implicitly enabled for this\n        class.  If the hash code is cached, avoid any reassignments of\n        fields involved in hash code computation or mutations of the objects\n        those fields point to after object creation.  If such changes occur,\n        the behavior of the object's hash code is undefined.\n    :param bool auto_exc: If the class subclasses `BaseException`\n        (which implicitly includes any subclass of any exception), the\n        following happens to behave like a well-behaved Python exceptions\n        class:\n\n        - the values for *eq*, *order*, and *hash* are ignored and the\n          instances compare and hash by the instance's ids (N.B. ``attrs`` will\n          *not* remove existing implementations of ``__hash__`` or the equality\n          methods. It just won't add own ones.),\n        - all attributes that are either passed into ``__init__`` or have a\n          default value are additionally available as a tuple in the ``args``\n          attribute,\n        - the value of *str* is ignored leaving ``__str__`` to base classes.\n    :param bool collect_by_mro: Setting this to `True` fixes the way ``attrs``\n       collects attributes from base classes.  The default behavior is\n       incorrect in certain cases of multiple inheritance.  It should be on by\n       default but is kept off for backward-compatibility.\n\n       See issue `#428 <https://github.com/python-attrs/attrs/issues/428>`_ for\n       more details.\n\n    :param Optional[bool] getstate_setstate:\n       .. note::\n          This is usually only interesting for slotted classes and you should\n          probably just set *auto_detect* to `True`.\n\n       If `True`, ``__getstate__`` and\n       ``__setstate__`` are generated and attached to the class. This is\n       necessary for slotted classes to be pickleable. If left `None`, it's\n       `True` by default for slotted classes and ``False`` for dict classes.\n\n       If *auto_detect* is `True`, and *getstate_setstate* is left `None`,\n       and **either** ``__getstate__`` or ``__setstate__`` is detected directly\n       on the class (i.e. not inherited), it is set to `False` (this is usually\n       what you want).\n\n    :param on_setattr: A callable that is run whenever the user attempts to set\n        an attribute (either by assignment like ``i.x = 42`` or by using\n        `setattr` like ``setattr(i, \"x\", 42)``). It receives the same arguments\n        as validators: the instance, the attribute that is being modified, and\n        the new value.\n\n        If no exception is raised, the attribute is set to the return value of\n        the callable.\n\n        If a list of callables is passed, they're automatically wrapped in an\n        `attrs.setters.pipe`.\n\n    :param Optional[callable] field_transformer:\n        A function that is called with the original class object and all\n        fields right before ``attrs`` finalizes the class.  You can use\n        this, e.g., to automatically add converters or validators to\n        fields based on their types.  See `transform-fields` for more details.\n\n    :param bool match_args:\n        If `True` (default), set ``__match_args__`` on the class to support\n        `PEP 634 <https://www.python.org/dev/peps/pep-0634/>`_ (Structural\n        Pattern Matching). It is a tuple of all positional-only ``__init__``\n        parameter names on Python 3.10 and later. Ignored on older Python\n        versions.\n\n    .. versionadded:: 16.0.0 *slots*\n    .. versionadded:: 16.1.0 *frozen*\n    .. versionadded:: 16.3.0 *str*\n    .. versionadded:: 16.3.0 Support for ``__attrs_post_init__``.\n    .. versionchanged:: 17.1.0\n       *hash* supports ``None`` as value which is also the default now.\n    .. versionadded:: 17.3.0 *auto_attribs*\n    .. versionchanged:: 18.1.0\n       If *these* is passed, no attributes are deleted from the class body.\n    .. versionchanged:: 18.1.0 If *these* is ordered, the order is retained.\n    .. versionadded:: 18.2.0 *weakref_slot*\n    .. deprecated:: 18.2.0\n       ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now raise a\n       `DeprecationWarning` if the classes compared are subclasses of\n       each other. ``__eq`` and ``__ne__`` never tried to compared subclasses\n       to each other.\n    .. versionchanged:: 19.2.0\n       ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now do not consider\n       subclasses comparable anymore.\n    .. versionadded:: 18.2.0 *kw_only*\n    .. versionadded:: 18.2.0 *cache_hash*\n    .. versionadded:: 19.1.0 *auto_exc*\n    .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01.\n    .. versionadded:: 19.2.0 *eq* and *order*\n    .. versionadded:: 20.1.0 *auto_detect*\n    .. versionadded:: 20.1.0 *collect_by_mro*\n    .. versionadded:: 20.1.0 *getstate_setstate*\n    .. versionadded:: 20.1.0 *on_setattr*\n    .. versionadded:: 20.3.0 *field_transformer*\n    .. versionchanged:: 21.1.0\n       ``init=False`` injects ``__attrs_init__``\n    .. versionchanged:: 21.1.0 Support for ``__attrs_pre_init__``\n    .. versionchanged:: 21.1.0 *cmp* undeprecated\n    .. versionadded:: 21.3.0 *match_args*\n    \"\"\"\n    if auto_detect and PY2:\n        raise PythonTooOldError(\n            \"auto_detect only works on Python 3 and later.\"\n        )\n\n    eq_, order_ = _determine_attrs_eq_order(cmp, eq, order, None)\n    hash_ = hash  # work around the lack of nonlocal\n\n    if isinstance(on_setattr, (list, tuple)):\n        on_setattr = setters.pipe(*on_setattr)\n\n    def wrap(cls):\n\n        if getattr(cls, \"__class__\", None) is None:\n            raise TypeError(\"attrs only works with new-style classes.\")\n\n        is_frozen = frozen or _has_frozen_base_class(cls)\n        is_exc = auto_exc is True and issubclass(cls, BaseException)\n        has_own_setattr = auto_detect and _has_own_attribute(\n            cls, \"__setattr__\"\n        )\n\n        if has_own_setattr and is_frozen:\n            raise ValueError(\"Can't freeze a class with a custom __setattr__.\")\n\n        builder = _ClassBuilder(\n            cls,\n            these,\n            slots,\n            is_frozen,\n            weakref_slot,\n            _determine_whether_to_implement(\n                cls,\n                getstate_setstate,\n                auto_detect,\n                (\"__getstate__\", \"__setstate__\"),\n                default=slots,\n            ),\n            auto_attribs,\n            kw_only,\n            cache_hash,\n            is_exc,\n            collect_by_mro,\n            on_setattr,\n            has_own_setattr,\n            field_transformer,\n        )\n        if _determine_whether_to_implement(\n            cls, repr, auto_detect, (\"__repr__\",)\n        ):\n            builder.add_repr(repr_ns)\n        if str is True:\n            builder.add_str()\n\n        eq = _determine_whether_to_implement(\n            cls, eq_, auto_detect, (\"__eq__\", \"__ne__\")\n        )\n        if not is_exc and eq is True:\n            builder.add_eq()\n        if not is_exc and _determine_whether_to_implement(\n            cls, order_, auto_detect, (\"__lt__\", \"__le__\", \"__gt__\", \"__ge__\")\n        ):\n            builder.add_order()\n\n        builder.add_setattr()\n\n        if (\n            hash_ is None\n            and auto_detect is True\n            and _has_own_attribute(cls, \"__hash__\")\n        ):\n            hash = False\n        else:\n            hash = hash_\n        if hash is not True and hash is not False and hash is not None:\n            # Can't use `hash in` because 1 == True for example.\n            raise TypeError(\n                \"Invalid value for hash.  Must be True, False, or None.\"\n            )\n        elif hash is False or (hash is None and eq is False) or is_exc:\n            # Don't do anything. Should fall back to __object__'s __hash__\n            # which is by id.\n            if cache_hash:\n                raise TypeError(\n                    \"Invalid value for cache_hash.  To use hash caching,\"\n                    \" hashing must be either explicitly or implicitly \"\n                    \"enabled.\"\n                )\n        elif hash is True or (\n            hash is None and eq is True and is_frozen is True\n        ):\n            # Build a __hash__ if told so, or if it's safe.\n            builder.add_hash()\n        else:\n            # Raise TypeError on attempts to hash.\n            if cache_hash:\n                raise TypeError(\n                    \"Invalid value for cache_hash.  To use hash caching,\"\n                    \" hashing must be either explicitly or implicitly \"\n                    \"enabled.\"\n                )\n            builder.make_unhashable()\n\n        if _determine_whether_to_implement(\n            cls, init, auto_detect, (\"__init__\",)\n        ):\n            builder.add_init()\n        else:\n            builder.add_attrs_init()\n            if cache_hash:\n                raise TypeError(\n                    \"Invalid value for cache_hash.  To use hash caching,\"\n                    \" init must be True.\"\n                )\n\n        if (\n            PY310\n            and match_args\n            and not _has_own_attribute(cls, \"__match_args__\")\n        ):\n            builder.add_match_args()\n\n        return builder.build_class()\n\n    # maybe_cls's type depends on the usage of the decorator.  It's a class\n    # if it's used as `@attrs` but ``None`` if used as `@attrs()`.\n    if maybe_cls is None:\n        return wrap\n    else:\n        return wrap(maybe_cls)\n\n\n_attrs = attrs\n\"\"\"\nInternal alias so we can use it in functions that take an argument called\n*attrs*.\n\"\"\"\n\n\nif PY2:\n\n    def _has_frozen_base_class(cls):\n        \"\"\"\n        Check whether *cls* has a frozen ancestor by looking at its\n        __setattr__.\n        \"\"\"\n        return (\n            getattr(cls.__setattr__, \"__module__\", None)\n            == _frozen_setattrs.__module__\n            and cls.__setattr__.__name__ == _frozen_setattrs.__name__\n        )\n\nelse:\n\n    def _has_frozen_base_class(cls):\n        \"\"\"\n        Check whether *cls* has a frozen ancestor by looking at its\n        __setattr__.\n        \"\"\"\n        return cls.__setattr__ == _frozen_setattrs\n\n\ndef _generate_unique_filename(cls, func_name):\n    \"\"\"\n    Create a \"filename\" suitable for a function being generated.\n    \"\"\"\n    unique_filename = \"<attrs generated {0} {1}.{2}>\".format(\n        func_name,\n        cls.__module__,\n        getattr(cls, \"__qualname__\", cls.__name__),\n    )\n    return unique_filename\n\n\ndef _make_hash(cls, attrs, frozen, cache_hash):\n    attrs = tuple(\n        a for a in attrs if a.hash is True or (a.hash is None and a.eq is True)\n    )\n\n    tab = \"        \"\n\n    unique_filename = _generate_unique_filename(cls, \"hash\")\n    type_hash = hash(unique_filename)\n\n    hash_def = \"def __hash__(self\"\n    hash_func = \"hash((\"\n    closing_braces = \"))\"\n    if not cache_hash:\n        hash_def += \"):\"\n    else:\n        if not PY2:\n            hash_def += \", *\"\n\n        hash_def += (\n            \", _cache_wrapper=\"\n            + \"__import__('attr._make')._make._CacheHashWrapper):\"\n        )\n        hash_func = \"_cache_wrapper(\" + hash_func\n        closing_braces += \")\"\n\n    method_lines = [hash_def]\n\n    def append_hash_computation_lines(prefix, indent):\n        \"\"\"\n        Generate the code for actually computing the hash code.\n        Below this will either be returned directly or used to compute\n        a value which is then cached, depending on the value of cache_hash\n        \"\"\"\n\n        method_lines.extend(\n            [\n                indent + prefix + hash_func,\n                indent + \"        %d,\" % (type_hash,),\n            ]\n        )\n\n        for a in attrs:\n            method_lines.append(indent + \"        self.%s,\" % a.name)\n\n        method_lines.append(indent + \"    \" + closing_braces)\n\n    if cache_hash:\n        method_lines.append(tab + \"if self.%s is None:\" % _hash_cache_field)\n        if frozen:\n            append_hash_computation_lines(\n                \"object.__setattr__(self, '%s', \" % _hash_cache_field, tab * 2\n            )\n            method_lines.append(tab * 2 + \")\")  # close __setattr__\n        else:\n            append_hash_computation_lines(\n                \"self.%s = \" % _hash_cache_field, tab * 2\n            )\n        method_lines.append(tab + \"return self.%s\" % _hash_cache_field)\n    else:\n        append_hash_computation_lines(\"return \", tab)\n\n    script = \"\\n\".join(method_lines)\n    return _make_method(\"__hash__\", script, unique_filename)\n\n\ndef _add_hash(cls, attrs):\n    \"\"\"\n    Add a hash method to *cls*.\n    \"\"\"\n    cls.__hash__ = _make_hash(cls, attrs, frozen=False, cache_hash=False)\n    return cls\n\n\ndef _make_ne():\n    \"\"\"\n    Create __ne__ method.\n    \"\"\"\n\n    def __ne__(self, other):\n        \"\"\"\n        Check equality and either forward a NotImplemented or\n        return the result negated.\n        \"\"\"\n        result = self.__eq__(other)\n        if result is NotImplemented:\n            return NotImplemented\n\n        return not result\n\n    return __ne__\n\n\ndef _make_eq(cls, attrs):\n    \"\"\"\n    Create __eq__ method for *cls* with *attrs*.\n    \"\"\"\n    attrs = [a for a in attrs if a.eq]\n\n    unique_filename = _generate_unique_filename(cls, \"eq\")\n    lines = [\n        \"def __eq__(self, other):\",\n        \"    if other.__class__ is not self.__class__:\",\n        \"        return NotImplemented\",\n    ]\n\n    # We can't just do a big self.x = other.x and... clause due to\n    # irregularities like nan == nan is false but (nan,) == (nan,) is true.\n    globs = {}\n    if attrs:\n        lines.append(\"    return  (\")\n        others = [\"    ) == (\"]\n        for a in attrs:\n            if a.eq_key:\n                cmp_name = \"_%s_key\" % (a.name,)\n                # Add the key function to the global namespace\n                # of the evaluated function.\n                globs[cmp_name] = a.eq_key\n                lines.append(\n                    \"        %s(self.%s),\"\n                    % (\n                        cmp_name,\n                        a.name,\n                    )\n                )\n                others.append(\n                    \"        %s(other.%s),\"\n                    % (\n                        cmp_name,\n                        a.name,\n                    )\n                )\n            else:\n                lines.append(\"        self.%s,\" % (a.name,))\n                others.append(\"        other.%s,\" % (a.name,))\n\n        lines += others + [\"    )\"]\n    else:\n        lines.append(\"    return True\")\n\n    script = \"\\n\".join(lines)\n\n    return _make_method(\"__eq__\", script, unique_filename, globs)\n\n\ndef _make_order(cls, attrs):\n    \"\"\"\n    Create ordering methods for *cls* with *attrs*.\n    \"\"\"\n    attrs = [a for a in attrs if a.order]\n\n    def attrs_to_tuple(obj):\n        \"\"\"\n        Save us some typing.\n        \"\"\"\n        return tuple(\n            key(value) if key else value\n            for value, key in (\n                (getattr(obj, a.name), a.order_key) for a in attrs\n            )\n        )\n\n    def __lt__(self, other):\n        \"\"\"\n        Automatically created by attrs.\n        \"\"\"\n        if other.__class__ is self.__class__:\n            return attrs_to_tuple(self) < attrs_to_tuple(other)\n\n        return NotImplemented\n\n    def __le__(self, other):\n        \"\"\"\n        Automatically created by attrs.\n        \"\"\"\n        if other.__class__ is self.__class__:\n            return attrs_to_tuple(self) <= attrs_to_tuple(other)\n\n        return NotImplemented\n\n    def __gt__(self, other):\n        \"\"\"\n        Automatically created by attrs.\n        \"\"\"\n        if other.__class__ is self.__class__:\n            return attrs_to_tuple(self) > attrs_to_tuple(other)\n\n        return NotImplemented\n\n    def __ge__(self, other):\n        \"\"\"\n        Automatically created by attrs.\n        \"\"\"\n        if other.__class__ is self.__class__:\n            return attrs_to_tuple(self) >= attrs_to_tuple(other)\n\n        return NotImplemented\n\n    return __lt__, __le__, __gt__, __ge__\n\n\ndef _add_eq(cls, attrs=None):\n    \"\"\"\n    Add equality methods to *cls* with *attrs*.\n    \"\"\"\n    if attrs is None:\n        attrs = cls.__attrs_attrs__\n\n    cls.__eq__ = _make_eq(cls, attrs)\n    cls.__ne__ = _make_ne()\n\n    return cls\n\n\nif HAS_F_STRINGS:\n\n    def _make_repr(attrs, ns, cls):\n        unique_filename = _generate_unique_filename(cls, \"repr\")\n        # Figure out which attributes to include, and which function to use to\n        # format them. The a.repr value can be either bool or a custom\n        # callable.\n        attr_names_with_reprs = tuple(\n            (a.name, (repr if a.repr is True else a.repr), a.init)\n            for a in attrs\n            if a.repr is not False\n        )\n        globs = {\n            name + \"_repr\": r\n            for name, r, _ in attr_names_with_reprs\n            if r != repr\n        }\n        globs[\"_compat\"] = _compat\n        globs[\"AttributeError\"] = AttributeError\n        globs[\"NOTHING\"] = NOTHING\n        attribute_fragments = []\n        for name, r, i in attr_names_with_reprs:\n            accessor = (\n                \"self.\" + name\n                if i\n                else 'getattr(self, \"' + name + '\", NOTHING)'\n            )\n            fragment = (\n                \"%s={%s!r}\" % (name, accessor)\n                if r == repr\n                else \"%s={%s_repr(%s)}\" % (name, name, accessor)\n            )\n            attribute_fragments.append(fragment)\n        repr_fragment = \", \".join(attribute_fragments)\n\n        if ns is None:\n            cls_name_fragment = (\n                '{self.__class__.__qualname__.rsplit(\">.\", 1)[-1]}'\n            )\n        else:\n            cls_name_fragment = ns + \".{self.__class__.__name__}\"\n\n        lines = [\n            \"def __repr__(self):\",\n            \"  try:\",\n            \"    already_repring = _compat.repr_context.already_repring\",\n            \"  except AttributeError:\",\n            \"    already_repring = {id(self),}\",\n            \"    _compat.repr_context.already_repring = already_repring\",\n            \"  else:\",\n            \"    if id(self) in already_repring:\",\n            \"      return '...'\",\n            \"    else:\",\n            \"      already_repring.add(id(self))\",\n            \"  try:\",\n            \"    return f'%s(%s)'\" % (cls_name_fragment, repr_fragment),\n            \"  finally:\",\n            \"    already_repring.remove(id(self))\",\n        ]\n\n        return _make_method(\n            \"__repr__\", \"\\n\".join(lines), unique_filename, globs=globs\n        )\n\nelse:\n\n    def _make_repr(attrs, ns, _):\n        \"\"\"\n        Make a repr method that includes relevant *attrs*, adding *ns* to the\n        full name.\n        \"\"\"\n\n        # Figure out which attributes to include, and which function to use to\n        # format them. The a.repr value can be either bool or a custom\n        # callable.\n        attr_names_with_reprs = tuple(\n            (a.name, repr if a.repr is True else a.repr)\n            for a in attrs\n            if a.repr is not False\n        )\n\n        def __repr__(self):\n            \"\"\"\n            Automatically created by attrs.\n            \"\"\"\n            try:\n                already_repring = _compat.repr_context.already_repring\n            except AttributeError:\n                already_repring = set()\n                _compat.repr_context.already_repring = already_repring\n\n            if id(self) in already_repring:\n                return \"...\"\n            real_cls = self.__class__\n            if ns is None:\n                qualname = getattr(real_cls, \"__qualname__\", None)\n                if qualname is not None:  # pragma: no cover\n                    # This case only happens on Python 3.5 and 3.6. We exclude\n                    # it from coverage, because we don't want to slow down our\n                    # test suite by running them under coverage too for this\n                    # one line.\n                    class_name = qualname.rsplit(\">.\", 1)[-1]\n                else:\n                    class_name = real_cls.__name__\n            else:\n                class_name = ns + \".\" + real_cls.__name__\n\n            # Since 'self' remains on the stack (i.e.: strongly referenced)\n            # for the duration of this call, it's safe to depend on id(...)\n            # stability, and not need to track the instance and therefore\n            # worry about properties like weakref- or hash-ability.\n            already_repring.add(id(self))\n            try:\n                result = [class_name, \"(\"]\n                first = True\n                for name, attr_repr in attr_names_with_reprs:\n                    if first:\n                        first = False\n                    else:\n                        result.append(\", \")\n                    result.extend(\n                        (name, \"=\", attr_repr(getattr(self, name, NOTHING)))\n                    )\n                return \"\".join(result) + \")\"\n            finally:\n                already_repring.remove(id(self))\n\n        return __repr__\n\n\ndef _add_repr(cls, ns=None, attrs=None):\n    \"\"\"\n    Add a repr method to *cls*.\n    \"\"\"\n    if attrs is None:\n        attrs = cls.__attrs_attrs__\n\n    cls.__repr__ = _make_repr(attrs, ns, cls)\n    return cls\n\n\ndef fields(cls):\n    \"\"\"\n    Return the tuple of ``attrs`` attributes for a class.\n\n    The tuple also allows accessing the fields by their names (see below for\n    examples).\n\n    :param type cls: Class to introspect.\n\n    :raise TypeError: If *cls* is not a class.\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    :rtype: tuple (with name accessors) of `attrs.Attribute`\n\n    ..  versionchanged:: 16.2.0 Returned tuple allows accessing the fields\n        by name.\n    \"\"\"\n    if not isclass(cls):\n        raise TypeError(\"Passed object must be a class.\")\n    attrs = getattr(cls, \"__attrs_attrs__\", None)\n    if attrs is None:\n        raise NotAnAttrsClassError(\n            \"{cls!r} is not an attrs-decorated class.\".format(cls=cls)\n        )\n    return attrs\n\n\ndef fields_dict(cls):\n    \"\"\"\n    Return an ordered dictionary of ``attrs`` attributes for a class, whose\n    keys are the attribute names.\n\n    :param type cls: Class to introspect.\n\n    :raise TypeError: If *cls* is not a class.\n    :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs``\n        class.\n\n    :rtype: an ordered dict where keys are attribute names and values are\n        `attrs.Attribute`\\\\ s. This will be a `dict` if it's\n        naturally ordered like on Python 3.6+ or an\n        :class:`~collections.OrderedDict` otherwise.\n\n    .. versionadded:: 18.1.0\n    \"\"\"\n    if not isclass(cls):\n        raise TypeError(\"Passed object must be a class.\")\n    attrs = getattr(cls, \"__attrs_attrs__\", None)\n    if attrs is None:\n        raise NotAnAttrsClassError(\n            \"{cls!r} is not an attrs-decorated class.\".format(cls=cls)\n        )\n    return ordered_dict(((a.name, a) for a in attrs))\n\n\ndef validate(inst):\n    \"\"\"\n    Validate all attributes on *inst* that have a validator.\n\n    Leaves all exceptions through.\n\n    :param inst: Instance of a class with ``attrs`` attributes.\n    \"\"\"\n    if _config._run_validators is False:\n        return\n\n    for a in fields(inst.__class__):\n        v = a.validator\n        if v is not None:\n            v(inst, a, getattr(inst, a.name))\n\n\ndef _is_slot_cls(cls):\n    return \"__slots__\" in cls.__dict__\n\n\ndef _is_slot_attr(a_name, base_attr_map):\n    \"\"\"\n    Check if the attribute name comes from a slot class.\n    \"\"\"\n    return a_name in base_attr_map and _is_slot_cls(base_attr_map[a_name])\n\n\ndef _make_init(\n    cls,\n    attrs,\n    pre_init,\n    post_init,\n    frozen,\n    slots,\n    cache_hash,\n    base_attr_map,\n    is_exc,\n    cls_on_setattr,\n    attrs_init,\n):\n    has_cls_on_setattr = (\n        cls_on_setattr is not None and cls_on_setattr is not setters.NO_OP\n    )\n\n    if frozen and has_cls_on_setattr:\n        raise ValueError(\"Frozen classes can't use on_setattr.\")\n\n    needs_cached_setattr = cache_hash or frozen\n    filtered_attrs = []\n    attr_dict = {}\n    for a in attrs:\n        if not a.init and a.default is NOTHING:\n            continue\n\n        filtered_attrs.append(a)\n        attr_dict[a.name] = a\n\n        if a.on_setattr is not None:\n            if frozen is True:\n                raise ValueError(\"Frozen classes can't use on_setattr.\")\n\n            needs_cached_setattr = True\n        elif has_cls_on_setattr and a.on_setattr is not setters.NO_OP:\n            needs_cached_setattr = True\n\n    unique_filename = _generate_unique_filename(cls, \"init\")\n\n    script, globs, annotations = _attrs_to_init_script(\n        filtered_attrs,\n        frozen,\n        slots,\n        pre_init,\n        post_init,\n        cache_hash,\n        base_attr_map,\n        is_exc,\n        needs_cached_setattr,\n        has_cls_on_setattr,\n        attrs_init,\n    )\n    if cls.__module__ in sys.modules:\n        # This makes typing.get_type_hints(CLS.__init__) resolve string types.\n        globs.update(sys.modules[cls.__module__].__dict__)\n\n    globs.update({\"NOTHING\": NOTHING, \"attr_dict\": attr_dict})\n\n    if needs_cached_setattr:\n        # Save the lookup overhead in __init__ if we need to circumvent\n        # setattr hooks.\n        globs[\"_cached_setattr\"] = _obj_setattr\n\n    init = _make_method(\n        \"__attrs_init__\" if attrs_init else \"__init__\",\n        script,\n        unique_filename,\n        globs,\n    )\n    init.__annotations__ = annotations\n\n    return init\n\n\ndef _setattr(attr_name, value_var, has_on_setattr):\n    \"\"\"\n    Use the cached object.setattr to set *attr_name* to *value_var*.\n    \"\"\"\n    return \"_setattr('%s', %s)\" % (attr_name, value_var)\n\n\ndef _setattr_with_converter(attr_name, value_var, has_on_setattr):\n    \"\"\"\n    Use the cached object.setattr to set *attr_name* to *value_var*, but run\n    its converter first.\n    \"\"\"\n    return \"_setattr('%s', %s(%s))\" % (\n        attr_name,\n        _init_converter_pat % (attr_name,),\n        value_var,\n    )\n\n\ndef _assign(attr_name, value, has_on_setattr):\n    \"\"\"\n    Unless *attr_name* has an on_setattr hook, use normal assignment. Otherwise\n    relegate to _setattr.\n    \"\"\"\n    if has_on_setattr:\n        return _setattr(attr_name, value, True)\n\n    return \"self.%s = %s\" % (attr_name, value)\n\n\ndef _assign_with_converter(attr_name, value_var, has_on_setattr):\n    \"\"\"\n    Unless *attr_name* has an on_setattr hook, use normal assignment after\n    conversion. Otherwise relegate to _setattr_with_converter.\n    \"\"\"\n    if has_on_setattr:\n        return _setattr_with_converter(attr_name, value_var, True)\n\n    return \"self.%s = %s(%s)\" % (\n        attr_name,\n        _init_converter_pat % (attr_name,),\n        value_var,\n    )\n\n\nif PY2:\n\n    def _unpack_kw_only_py2(attr_name, default=None):\n        \"\"\"\n        Unpack *attr_name* from _kw_only dict.\n        \"\"\"\n        if default is not None:\n            arg_default = \", %s\" % default\n        else:\n            arg_default = \"\"\n        return \"%s = _kw_only.pop('%s'%s)\" % (\n            attr_name,\n            attr_name,\n            arg_default,\n        )\n\n    def _unpack_kw_only_lines_py2(kw_only_args):\n        \"\"\"\n        Unpack all *kw_only_args* from _kw_only dict and handle errors.\n\n        Given a list of strings \"{attr_name}\" and \"{attr_name}={default}\"\n        generates list of lines of code that pop attrs from _kw_only dict and\n        raise TypeError similar to builtin if required attr is missing or\n        extra key is passed.\n\n        >>> print(\"\\n\".join(_unpack_kw_only_lines_py2([\"a\", \"b=42\"])))\n        try:\n            a = _kw_only.pop('a')\n            b = _kw_only.pop('b', 42)\n        except KeyError as _key_error:\n            raise TypeError(\n                ...\n        if _kw_only:\n            raise TypeError(\n                ...\n        \"\"\"\n        lines = [\"try:\"]\n        lines.extend(\n            \"    \" + _unpack_kw_only_py2(*arg.split(\"=\"))\n            for arg in kw_only_args\n        )\n        lines += \"\"\"\\\nexcept KeyError as _key_error:\n    raise TypeError(\n        '__init__() missing required keyword-only argument: %s' % _key_error\n    )\nif _kw_only:\n    raise TypeError(\n        '__init__() got an unexpected keyword argument %r'\n        % next(iter(_kw_only))\n    )\n\"\"\".split(\n            \"\\n\"\n        )\n        return lines\n\n\ndef _attrs_to_init_script(\n    attrs,\n    frozen,\n    slots,\n    pre_init,\n    post_init,\n    cache_hash,\n    base_attr_map,\n    is_exc,\n    needs_cached_setattr,\n    has_cls_on_setattr,\n    attrs_init,\n):\n    \"\"\"\n    Return a script of an initializer for *attrs* and a dict of globals.\n\n    The globals are expected by the generated script.\n\n    If *frozen* is True, we cannot set the attributes directly so we use\n    a cached ``object.__setattr__``.\n    \"\"\"\n    lines = []\n    if pre_init:\n        lines.append(\"self.__attrs_pre_init__()\")\n\n    if needs_cached_setattr:\n        lines.append(\n            # Circumvent the __setattr__ descriptor to save one lookup per\n            # assignment.\n            # Note _setattr will be used again below if cache_hash is True\n            \"_setattr = _cached_setattr.__get__(self, self.__class__)\"\n        )\n\n    if frozen is True:\n        if slots is True:\n            fmt_setter = _setattr\n            fmt_setter_with_converter = _setattr_with_converter\n        else:\n            # Dict frozen classes assign directly to __dict__.\n            # But only if the attribute doesn't come from an ancestor slot\n            # class.\n            # Note _inst_dict will be used again below if cache_hash is True\n            lines.append(\"_inst_dict = self.__dict__\")\n\n            def fmt_setter(attr_name, value_var, has_on_setattr):\n                if _is_slot_attr(attr_name, base_attr_map):\n                    return _setattr(attr_name, value_var, has_on_setattr)\n\n                return \"_inst_dict['%s'] = %s\" % (attr_name, value_var)\n\n            def fmt_setter_with_converter(\n                attr_name, value_var, has_on_setattr\n            ):\n                if has_on_setattr or _is_slot_attr(attr_name, base_attr_map):\n                    return _setattr_with_converter(\n                        attr_name, value_var, has_on_setattr\n                    )\n\n                return \"_inst_dict['%s'] = %s(%s)\" % (\n                    attr_name,\n                    _init_converter_pat % (attr_name,),\n                    value_var,\n                )\n\n    else:\n        # Not frozen.\n        fmt_setter = _assign\n        fmt_setter_with_converter = _assign_with_converter\n\n    args = []\n    kw_only_args = []\n    attrs_to_validate = []\n\n    # This is a dictionary of names to validator and converter callables.\n    # Injecting this into __init__ globals lets us avoid lookups.\n    names_for_globals = {}\n    annotations = {\"return\": None}\n\n    for a in attrs:\n        if a.validator:\n            attrs_to_validate.append(a)\n\n        attr_name = a.name\n        has_on_setattr = a.on_setattr is not None or (\n            a.on_setattr is not setters.NO_OP and has_cls_on_setattr\n        )\n        arg_name = a.name.lstrip(\"_\")\n\n        has_factory = isinstance(a.default, Factory)\n        if has_factory and a.default.takes_self:\n            maybe_self = \"self\"\n        else:\n            maybe_self = \"\"\n\n        if a.init is False:\n            if has_factory:\n                init_factory_name = _init_factory_pat.format(a.name)\n                if a.converter is not None:\n                    lines.append(\n                        fmt_setter_with_converter(\n                            attr_name,\n                            init_factory_name + \"(%s)\" % (maybe_self,),\n                            has_on_setattr,\n                        )\n                    )\n                    conv_name = _init_converter_pat % (a.name,)\n                    names_for_globals[conv_name] = a.converter\n                else:\n                    lines.append(\n                        fmt_setter(\n                            attr_name,\n                            init_factory_name + \"(%s)\" % (maybe_self,),\n                            has_on_setattr,\n                        )\n                    )\n                names_for_globals[init_factory_name] = a.default.factory\n            else:\n                if a.converter is not None:\n                    lines.append(\n                        fmt_setter_with_converter(\n                            attr_name,\n                            \"attr_dict['%s'].default\" % (attr_name,),\n                            has_on_setattr,\n                        )\n                    )\n                    conv_name = _init_converter_pat % (a.name,)\n                    names_for_globals[conv_name] = a.converter\n                else:\n                    lines.append(\n                        fmt_setter(\n                            attr_name,\n                            \"attr_dict['%s'].default\" % (attr_name,),\n                            has_on_setattr,\n                        )\n                    )\n        elif a.default is not NOTHING and not has_factory:\n            arg = \"%s=attr_dict['%s'].default\" % (arg_name, attr_name)\n            if a.kw_only:\n                kw_only_args.append(arg)\n            else:\n                args.append(arg)\n\n            if a.converter is not None:\n                lines.append(\n                    fmt_setter_with_converter(\n                        attr_name, arg_name, has_on_setattr\n                    )\n                )\n                names_for_globals[\n                    _init_converter_pat % (a.name,)\n                ] = a.converter\n            else:\n                lines.append(fmt_setter(attr_name, arg_name, has_on_setattr))\n\n        elif has_factory:\n            arg = \"%s=NOTHING\" % (arg_name,)\n            if a.kw_only:\n                kw_only_args.append(arg)\n            else:\n                args.append(arg)\n            lines.append(\"if %s is not NOTHING:\" % (arg_name,))\n\n            init_factory_name = _init_factory_pat.format(a.name)\n            if a.converter is not None:\n                lines.append(\n                    \"    \"\n                    + fmt_setter_with_converter(\n                        attr_name, arg_name, has_on_setattr\n                    )\n                )\n                lines.append(\"else:\")\n                lines.append(\n                    \"    \"\n                    + fmt_setter_with_converter(\n                        attr_name,\n                        init_factory_name + \"(\" + maybe_self + \")\",\n                        has_on_setattr,\n                    )\n                )\n                names_for_globals[\n                    _init_converter_pat % (a.name,)\n                ] = a.converter\n            else:\n                lines.append(\n                    \"    \" + fmt_setter(attr_name, arg_name, has_on_setattr)\n                )\n                lines.append(\"else:\")\n                lines.append(\n                    \"    \"\n                    + fmt_setter(\n                        attr_name,\n                        init_factory_name + \"(\" + maybe_self + \")\",\n                        has_on_setattr,\n                    )\n                )\n            names_for_globals[init_factory_name] = a.default.factory\n        else:\n            if a.kw_only:\n                kw_only_args.append(arg_name)\n            else:\n                args.append(arg_name)\n\n            if a.converter is not None:\n                lines.append(\n                    fmt_setter_with_converter(\n                        attr_name, arg_name, has_on_setattr\n                    )\n                )\n                names_for_globals[\n                    _init_converter_pat % (a.name,)\n                ] = a.converter\n            else:\n                lines.append(fmt_setter(attr_name, arg_name, has_on_setattr))\n\n        if a.init is True:\n            if a.type is not None and a.converter is None:\n                annotations[arg_name] = a.type\n            elif a.converter is not None and not PY2:\n                # Try to get the type from the converter.\n                sig = None\n                try:\n                    sig = inspect.signature(a.converter)\n                except (ValueError, TypeError):  # inspect failed\n                    pass\n                if sig:\n                    sig_params = list(sig.parameters.values())\n                    if (\n                        sig_params\n                        and sig_params[0].annotation\n                        is not inspect.Parameter.empty\n                    ):\n                        annotations[arg_name] = sig_params[0].annotation\n\n    if attrs_to_validate:  # we can skip this if there are no validators.\n        names_for_globals[\"_config\"] = _config\n        lines.append(\"if _config._run_validators is True:\")\n        for a in attrs_to_validate:\n            val_name = \"__attr_validator_\" + a.name\n            attr_name = \"__attr_\" + a.name\n            lines.append(\n                \"    %s(self, %s, self.%s)\" % (val_name, attr_name, a.name)\n            )\n            names_for_globals[val_name] = a.validator\n            names_for_globals[attr_name] = a\n\n    if post_init:\n        lines.append(\"self.__attrs_post_init__()\")\n\n    # because this is set only after __attrs_post_init is called, a crash\n    # will result if post-init tries to access the hash code.  This seemed\n    # preferable to setting this beforehand, in which case alteration to\n    # field values during post-init combined with post-init accessing the\n    # hash code would result in silent bugs.\n    if cache_hash:\n        if frozen:\n            if slots:\n                # if frozen and slots, then _setattr defined above\n                init_hash_cache = \"_setattr('%s', %s)\"\n            else:\n                # if frozen and not slots, then _inst_dict defined above\n                init_hash_cache = \"_inst_dict['%s'] = %s\"\n        else:\n            init_hash_cache = \"self.%s = %s\"\n        lines.append(init_hash_cache % (_hash_cache_field, \"None\"))\n\n    # For exceptions we rely on BaseException.__init__ for proper\n    # initialization.\n    if is_exc:\n        vals = \",\".join(\"self.\" + a.name for a in attrs if a.init)\n\n        lines.append(\"BaseException.__init__(self, %s)\" % (vals,))\n\n    args = \", \".join(args)\n    if kw_only_args:\n        if PY2:\n            lines = _unpack_kw_only_lines_py2(kw_only_args) + lines\n\n            args += \"%s**_kw_only\" % (\", \" if args else \"\",)  # leading comma\n        else:\n            args += \"%s*, %s\" % (\n                \", \" if args else \"\",  # leading comma\n                \", \".join(kw_only_args),  # kw_only args\n            )\n    return (\n        \"\"\"\\\ndef {init_name}(self, {args}):\n    {lines}\n\"\"\".format(\n            init_name=(\"__attrs_init__\" if attrs_init else \"__init__\"),\n            args=args,\n            lines=\"\\n    \".join(lines) if lines else \"pass\",\n        ),\n        names_for_globals,\n        annotations,\n    )\n\n\nclass Attribute(object):\n    \"\"\"\n    *Read-only* representation of an attribute.\n\n    The class has *all* arguments of `attr.ib` (except for ``factory``\n    which is only syntactic sugar for ``default=Factory(...)`` plus the\n    following:\n\n    - ``name`` (`str`): The name of the attribute.\n    - ``inherited`` (`bool`): Whether or not that attribute has been inherited\n      from a base class.\n    - ``eq_key`` and ``order_key`` (`typing.Callable` or `None`): The callables\n      that are used for comparing and ordering objects by this attribute,\n      respectively. These are set by passing a callable to `attr.ib`'s ``eq``,\n      ``order``, or ``cmp`` arguments. See also :ref:`comparison customization\n      <custom-comparison>`.\n\n    Instances of this class are frequently used for introspection purposes\n    like:\n\n    - `fields` returns a tuple of them.\n    - Validators get them passed as the first argument.\n    - The :ref:`field transformer <transform-fields>` hook receives a list of\n      them.\n\n    .. versionadded:: 20.1.0 *inherited*\n    .. versionadded:: 20.1.0 *on_setattr*\n    .. versionchanged:: 20.2.0 *inherited* is not taken into account for\n        equality checks and hashing anymore.\n    .. versionadded:: 21.1.0 *eq_key* and *order_key*\n\n    For the full version history of the fields, see `attr.ib`.\n    \"\"\"\n\n    __slots__ = (\n        \"name\",\n        \"default\",\n        \"validator\",\n        \"repr\",\n        \"eq\",\n        \"eq_key\",\n        \"order\",\n        \"order_key\",\n        \"hash\",\n        \"init\",\n        \"metadata\",\n        \"type\",\n        \"converter\",\n        \"kw_only\",\n        \"inherited\",\n        \"on_setattr\",\n    )\n\n    def __init__(\n        self,\n        name,\n        default,\n        validator,\n        repr,\n        cmp,  # XXX: unused, remove along with other cmp code.\n        hash,\n        init,\n        inherited,\n        metadata=None,\n        type=None,\n        converter=None,\n        kw_only=False,\n        eq=None,\n        eq_key=None,\n        order=None,\n        order_key=None,\n        on_setattr=None,\n    ):\n        eq, eq_key, order, order_key = _determine_attrib_eq_order(\n            cmp, eq_key or eq, order_key or order, True\n        )\n\n        # Cache this descriptor here to speed things up later.\n        bound_setattr = _obj_setattr.__get__(self, Attribute)\n\n        # Despite the big red warning, people *do* instantiate `Attribute`\n        # themselves.\n        bound_setattr(\"name\", name)\n        bound_setattr(\"default\", default)\n        bound_setattr(\"validator\", validator)\n        bound_setattr(\"repr\", repr)\n        bound_setattr(\"eq\", eq)\n        bound_setattr(\"eq_key\", eq_key)\n        bound_setattr(\"order\", order)\n        bound_setattr(\"order_key\", order_key)\n        bound_setattr(\"hash\", hash)\n        bound_setattr(\"init\", init)\n        bound_setattr(\"converter\", converter)\n        bound_setattr(\n            \"metadata\",\n            (\n                metadata_proxy(metadata)\n                if metadata\n                else _empty_metadata_singleton\n            ),\n        )\n        bound_setattr(\"type\", type)\n        bound_setattr(\"kw_only\", kw_only)\n        bound_setattr(\"inherited\", inherited)\n        bound_setattr(\"on_setattr\", on_setattr)\n\n    def __setattr__(self, name, value):\n        raise FrozenInstanceError()\n\n    @classmethod\n    def from_counting_attr(cls, name, ca, type=None):\n        # type holds the annotated value. deal with conflicts:\n        if type is None:\n            type = ca.type\n        elif ca.type is not None:\n            raise ValueError(\n                \"Type annotation and type argument cannot both be present\"\n            )\n        inst_dict = {\n            k: getattr(ca, k)\n            for k in Attribute.__slots__\n            if k\n            not in (\n                \"name\",\n                \"validator\",\n                \"default\",\n                \"type\",\n                \"inherited\",\n            )  # exclude methods and deprecated alias\n        }\n        return cls(\n            name=name,\n            validator=ca._validator,\n            default=ca._default,\n            type=type,\n            cmp=None,\n            inherited=False,\n            **inst_dict\n        )\n\n    @property\n    def cmp(self):\n        \"\"\"\n        Simulate the presence of a cmp attribute and warn.\n        \"\"\"\n        warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=2)\n\n        return self.eq and self.order\n\n    # Don't use attr.evolve since fields(Attribute) doesn't work\n    def evolve(self, **changes):\n        \"\"\"\n        Copy *self* and apply *changes*.\n\n        This works similarly to `attr.evolve` but that function does not work\n        with ``Attribute``.\n\n        It is mainly meant to be used for `transform-fields`.\n\n        .. versionadded:: 20.3.0\n        \"\"\"\n        new = copy.copy(self)\n\n        new._setattrs(changes.items())\n\n        return new\n\n    # Don't use _add_pickle since fields(Attribute) doesn't work\n    def __getstate__(self):\n        \"\"\"\n        Play nice with pickle.\n        \"\"\"\n        return tuple(\n            getattr(self, name) if name != \"metadata\" else dict(self.metadata)\n            for name in self.__slots__\n        )\n\n    def __setstate__(self, state):\n        \"\"\"\n        Play nice with pickle.\n        \"\"\"\n        self._setattrs(zip(self.__slots__, state))\n\n    def _setattrs(self, name_values_pairs):\n        bound_setattr = _obj_setattr.__get__(self, Attribute)\n        for name, value in name_values_pairs:\n            if name != \"metadata\":\n                bound_setattr(name, value)\n            else:\n                bound_setattr(\n                    name,\n                    metadata_proxy(value)\n                    if value\n                    else _empty_metadata_singleton,\n                )\n\n\n_a = [\n    Attribute(\n        name=name,\n        default=NOTHING,\n        validator=None,\n        repr=True,\n        cmp=None,\n        eq=True,\n        order=False,\n        hash=(name != \"metadata\"),\n        init=True,\n        inherited=False,\n    )\n    for name in Attribute.__slots__\n]\n\nAttribute = _add_hash(\n    _add_eq(\n        _add_repr(Attribute, attrs=_a),\n        attrs=[a for a in _a if a.name != \"inherited\"],\n    ),\n    attrs=[a for a in _a if a.hash and a.name != \"inherited\"],\n)\n\n\nclass _CountingAttr(object):\n    \"\"\"\n    Intermediate representation of attributes that uses a counter to preserve\n    the order in which the attributes have been defined.\n\n    *Internal* data structure of the attrs library.  Running into is most\n    likely the result of a bug like a forgotten `@attr.s` decorator.\n    \"\"\"\n\n    __slots__ = (\n        \"counter\",\n        \"_default\",\n        \"repr\",\n        \"eq\",\n        \"eq_key\",\n        \"order\",\n        \"order_key\",\n        \"hash\",\n        \"init\",\n        \"metadata\",\n        \"_validator\",\n        \"converter\",\n        \"type\",\n        \"kw_only\",\n        \"on_setattr\",\n    )\n    __attrs_attrs__ = tuple(\n        Attribute(\n            name=name,\n            default=NOTHING,\n            validator=None,\n            repr=True,\n            cmp=None,\n            hash=True,\n            init=True,\n            kw_only=False,\n            eq=True,\n            eq_key=None,\n            order=False,\n            order_key=None,\n            inherited=False,\n            on_setattr=None,\n        )\n        for name in (\n            \"counter\",\n            \"_default\",\n            \"repr\",\n            \"eq\",\n            \"order\",\n            \"hash\",\n            \"init\",\n            \"on_setattr\",\n        )\n    ) + (\n        Attribute(\n            name=\"metadata\",\n            default=None,\n            validator=None,\n            repr=True,\n            cmp=None,\n            hash=False,\n            init=True,\n            kw_only=False,\n            eq=True,\n            eq_key=None,\n            order=False,\n            order_key=None,\n            inherited=False,\n            on_setattr=None,\n        ),\n    )\n    cls_counter = 0\n\n    def __init__(\n        self,\n        default,\n        validator,\n        repr,\n        cmp,\n        hash,\n        init,\n        converter,\n        metadata,\n        type,\n        kw_only,\n        eq,\n        eq_key,\n        order,\n        order_key,\n        on_setattr,\n    ):\n        _CountingAttr.cls_counter += 1\n        self.counter = _CountingAttr.cls_counter\n        self._default = default\n        self._validator = validator\n        self.converter = converter\n        self.repr = repr\n        self.eq = eq\n        self.eq_key = eq_key\n        self.order = order\n        self.order_key = order_key\n        self.hash = hash\n        self.init = init\n        self.metadata = metadata\n        self.type = type\n        self.kw_only = kw_only\n        self.on_setattr = on_setattr\n\n    def validator(self, meth):\n        \"\"\"\n        Decorator that adds *meth* to the list of validators.\n\n        Returns *meth* unchanged.\n\n        .. versionadded:: 17.1.0\n        \"\"\"\n        if self._validator is None:\n            self._validator = meth\n        else:\n            self._validator = and_(self._validator, meth)\n        return meth\n\n    def default(self, meth):\n        \"\"\"\n        Decorator that allows to set the default for an attribute.\n\n        Returns *meth* unchanged.\n\n        :raises DefaultAlreadySetError: If default has been set before.\n\n        .. versionadded:: 17.1.0\n        \"\"\"\n        if self._default is not NOTHING:\n            raise DefaultAlreadySetError()\n\n        self._default = Factory(meth, takes_self=True)\n\n        return meth\n\n\n_CountingAttr = _add_eq(_add_repr(_CountingAttr))\n\n\nclass Factory(object):\n    \"\"\"\n    Stores a factory callable.\n\n    If passed as the default value to `attrs.field`, the factory is used to\n    generate a new value.\n\n    :param callable factory: A callable that takes either none or exactly one\n        mandatory positional argument depending on *takes_self*.\n    :param bool takes_self: Pass the partially initialized instance that is\n        being initialized as a positional argument.\n\n    .. versionadded:: 17.1.0  *takes_self*\n    \"\"\"\n\n    __slots__ = (\"factory\", \"takes_self\")\n\n    def __init__(self, factory, takes_self=False):\n        \"\"\"\n        `Factory` is part of the default machinery so if we want a default\n        value here, we have to implement it ourselves.\n        \"\"\"\n        self.factory = factory\n        self.takes_self = takes_self\n\n    def __getstate__(self):\n        \"\"\"\n        Play nice with pickle.\n        \"\"\"\n        return tuple(getattr(self, name) for name in self.__slots__)\n\n    def __setstate__(self, state):\n        \"\"\"\n        Play nice with pickle.\n        \"\"\"\n        for name, value in zip(self.__slots__, state):\n            setattr(self, name, value)\n\n\n_f = [\n    Attribute(\n        name=name,\n        default=NOTHING,\n        validator=None,\n        repr=True,\n        cmp=None,\n        eq=True,\n        order=False,\n        hash=True,\n        init=True,\n        inherited=False,\n    )\n    for name in Factory.__slots__\n]\n\nFactory = _add_hash(_add_eq(_add_repr(Factory, attrs=_f), attrs=_f), attrs=_f)\n\n\ndef make_class(name, attrs, bases=(object,), **attributes_arguments):\n    \"\"\"\n    A quick way to create a new class called *name* with *attrs*.\n\n    :param str name: The name for the new class.\n\n    :param attrs: A list of names or a dictionary of mappings of names to\n        attributes.\n\n        If *attrs* is a list or an ordered dict (`dict` on Python 3.6+,\n        `collections.OrderedDict` otherwise), the order is deduced from\n        the order of the names or attributes inside *attrs*.  Otherwise the\n        order of the definition of the attributes is used.\n    :type attrs: `list` or `dict`\n\n    :param tuple bases: Classes that the new class will subclass.\n\n    :param attributes_arguments: Passed unmodified to `attr.s`.\n\n    :return: A new class with *attrs*.\n    :rtype: type\n\n    .. versionadded:: 17.1.0 *bases*\n    .. versionchanged:: 18.1.0 If *attrs* is ordered, the order is retained.\n    \"\"\"\n    if isinstance(attrs, dict):\n        cls_dict = attrs\n    elif isinstance(attrs, (list, tuple)):\n        cls_dict = dict((a, attrib()) for a in attrs)\n    else:\n        raise TypeError(\"attrs argument must be a dict or a list.\")\n\n    pre_init = cls_dict.pop(\"__attrs_pre_init__\", None)\n    post_init = cls_dict.pop(\"__attrs_post_init__\", None)\n    user_init = cls_dict.pop(\"__init__\", None)\n\n    body = {}\n    if pre_init is not None:\n        body[\"__attrs_pre_init__\"] = pre_init\n    if post_init is not None:\n        body[\"__attrs_post_init__\"] = post_init\n    if user_init is not None:\n        body[\"__init__\"] = user_init\n\n    type_ = new_class(name, bases, {}, lambda ns: ns.update(body))\n\n    # For pickling to work, the __module__ variable needs to be set to the\n    # frame where the class is created.  Bypass this step in environments where\n    # sys._getframe is not defined (Jython for example) or sys._getframe is not\n    # defined for arguments greater than 0 (IronPython).\n    try:\n        type_.__module__ = sys._getframe(1).f_globals.get(\n            \"__name__\", \"__main__\"\n        )\n    except (AttributeError, ValueError):\n        pass\n\n    # We do it here for proper warnings with meaningful stacklevel.\n    cmp = attributes_arguments.pop(\"cmp\", None)\n    (\n        attributes_arguments[\"eq\"],\n        attributes_arguments[\"order\"],\n    ) = _determine_attrs_eq_order(\n        cmp,\n        attributes_arguments.get(\"eq\"),\n        attributes_arguments.get(\"order\"),\n        True,\n    )\n\n    return _attrs(these=cls_dict, **attributes_arguments)(type_)\n\n\n# These are required by within this module so we define them here and merely\n# import into .validators / .converters.\n\n\n@attrs(slots=True, hash=True)\nclass _AndValidator(object):\n    \"\"\"\n    Compose many validators to a single one.\n    \"\"\"\n\n    _validators = attrib()\n\n    def __call__(self, inst, attr, value):\n        for v in self._validators:\n            v(inst, attr, value)\n\n\ndef and_(*validators):\n    \"\"\"\n    A validator that composes multiple validators into one.\n\n    When called on a value, it runs all wrapped validators.\n\n    :param callables validators: Arbitrary number of validators.\n\n    .. versionadded:: 17.1.0\n    \"\"\"\n    vals = []\n    for validator in validators:\n        vals.extend(\n            validator._validators\n            if isinstance(validator, _AndValidator)\n            else [validator]\n        )\n\n    return _AndValidator(tuple(vals))\n\n\ndef pipe(*converters):\n    \"\"\"\n    A converter that composes multiple converters into one.\n\n    When called on a value, it runs all wrapped converters, returning the\n    *last* value.\n\n    Type annotations will be inferred from the wrapped converters', if\n    they have any.\n\n    :param callables converters: Arbitrary number of converters.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n\n    def pipe_converter(val):\n        for converter in converters:\n            val = converter(val)\n\n        return val\n\n    if not PY2:\n        if not converters:\n            # If the converter list is empty, pipe_converter is the identity.\n            A = typing.TypeVar(\"A\")\n            pipe_converter.__annotations__ = {\"val\": A, \"return\": A}\n        else:\n            # Get parameter type.\n            sig = None\n            try:\n                sig = inspect.signature(converters[0])\n            except (ValueError, TypeError):  # inspect failed\n                pass\n            if sig:\n                params = list(sig.parameters.values())\n                if (\n                    params\n                    and params[0].annotation is not inspect.Parameter.empty\n                ):\n                    pipe_converter.__annotations__[\"val\"] = params[\n                        0\n                    ].annotation\n            # Get return type.\n            sig = None\n            try:\n                sig = inspect.signature(converters[-1])\n            except (ValueError, TypeError):  # inspect failed\n                pass\n            if sig and sig.return_annotation is not inspect.Signature().empty:\n                pipe_converter.__annotations__[\n                    \"return\"\n                ] = sig.return_annotation\n\n    return pipe_converter\n"
  },
  {
    "path": "vendor/attr/_next_gen.py",
    "content": "# SPDX-License-Identifier: MIT\n\n\"\"\"\nThese are Python 3.6+-only and keyword-only APIs that call `attr.s` and\n`attr.ib` with different default values.\n\"\"\"\n\n\nfrom functools import partial\n\nfrom . import setters\nfrom ._funcs import asdict as _asdict\nfrom ._funcs import astuple as _astuple\nfrom ._make import (\n    NOTHING,\n    _frozen_setattrs,\n    _ng_default_on_setattr,\n    attrib,\n    attrs,\n)\nfrom .exceptions import UnannotatedAttributeError\n\n\ndef define(\n    maybe_cls=None,\n    *,\n    these=None,\n    repr=None,\n    hash=None,\n    init=None,\n    slots=True,\n    frozen=False,\n    weakref_slot=True,\n    str=False,\n    auto_attribs=None,\n    kw_only=False,\n    cache_hash=False,\n    auto_exc=True,\n    eq=None,\n    order=False,\n    auto_detect=True,\n    getstate_setstate=None,\n    on_setattr=None,\n    field_transformer=None,\n    match_args=True,\n):\n    r\"\"\"\n    Define an ``attrs`` class.\n\n    Differences to the classic `attr.s` that it uses underneath:\n\n    - Automatically detect whether or not *auto_attribs* should be `True`\n      (c.f. *auto_attribs* parameter).\n    - If *frozen* is `False`, run converters and validators when setting an\n      attribute by default.\n    - *slots=True* (see :term:`slotted classes` for potentially surprising\n      behaviors)\n    - *auto_exc=True*\n    - *auto_detect=True*\n    - *order=False*\n    - *match_args=True*\n    - Some options that were only relevant on Python 2 or were kept around for\n      backwards-compatibility have been removed.\n\n    Please note that these are all defaults and you can change them as you\n    wish.\n\n    :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves\n       exactly like `attr.s`. If left `None`, `attr.s` will try to guess:\n\n       1. If any attributes are annotated and no unannotated `attrs.fields`\\ s\n          are found, it assumes *auto_attribs=True*.\n       2. Otherwise it assumes *auto_attribs=False* and tries to collect\n          `attrs.fields`\\ s.\n\n    For now, please refer to `attr.s` for the rest of the parameters.\n\n    .. versionadded:: 20.1.0\n    .. versionchanged:: 21.3.0 Converters are also run ``on_setattr``.\n    \"\"\"\n\n    def do_it(cls, auto_attribs):\n        return attrs(\n            maybe_cls=cls,\n            these=these,\n            repr=repr,\n            hash=hash,\n            init=init,\n            slots=slots,\n            frozen=frozen,\n            weakref_slot=weakref_slot,\n            str=str,\n            auto_attribs=auto_attribs,\n            kw_only=kw_only,\n            cache_hash=cache_hash,\n            auto_exc=auto_exc,\n            eq=eq,\n            order=order,\n            auto_detect=auto_detect,\n            collect_by_mro=True,\n            getstate_setstate=getstate_setstate,\n            on_setattr=on_setattr,\n            field_transformer=field_transformer,\n            match_args=match_args,\n        )\n\n    def wrap(cls):\n        \"\"\"\n        Making this a wrapper ensures this code runs during class creation.\n\n        We also ensure that frozen-ness of classes is inherited.\n        \"\"\"\n        nonlocal frozen, on_setattr\n\n        had_on_setattr = on_setattr not in (None, setters.NO_OP)\n\n        # By default, mutable classes convert & validate on setattr.\n        if frozen is False and on_setattr is None:\n            on_setattr = _ng_default_on_setattr\n\n        # However, if we subclass a frozen class, we inherit the immutability\n        # and disable on_setattr.\n        for base_cls in cls.__bases__:\n            if base_cls.__setattr__ is _frozen_setattrs:\n                if had_on_setattr:\n                    raise ValueError(\n                        \"Frozen classes can't use on_setattr \"\n                        \"(frozen-ness was inherited).\"\n                    )\n\n                on_setattr = setters.NO_OP\n                break\n\n        if auto_attribs is not None:\n            return do_it(cls, auto_attribs)\n\n        try:\n            return do_it(cls, True)\n        except UnannotatedAttributeError:\n            return do_it(cls, False)\n\n    # maybe_cls's type depends on the usage of the decorator.  It's a class\n    # if it's used as `@attrs` but ``None`` if used as `@attrs()`.\n    if maybe_cls is None:\n        return wrap\n    else:\n        return wrap(maybe_cls)\n\n\nmutable = define\nfrozen = partial(define, frozen=True, on_setattr=None)\n\n\ndef field(\n    *,\n    default=NOTHING,\n    validator=None,\n    repr=True,\n    hash=None,\n    init=True,\n    metadata=None,\n    converter=None,\n    factory=None,\n    kw_only=False,\n    eq=None,\n    order=None,\n    on_setattr=None,\n):\n    \"\"\"\n    Identical to `attr.ib`, except keyword-only and with some arguments\n    removed.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n    return attrib(\n        default=default,\n        validator=validator,\n        repr=repr,\n        hash=hash,\n        init=init,\n        metadata=metadata,\n        converter=converter,\n        factory=factory,\n        kw_only=kw_only,\n        eq=eq,\n        order=order,\n        on_setattr=on_setattr,\n    )\n\n\ndef asdict(inst, *, recurse=True, filter=None, value_serializer=None):\n    \"\"\"\n    Same as `attr.asdict`, except that collections types are always retained\n    and dict is always used as *dict_factory*.\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _asdict(\n        inst=inst,\n        recurse=recurse,\n        filter=filter,\n        value_serializer=value_serializer,\n        retain_collection_types=True,\n    )\n\n\ndef astuple(inst, *, recurse=True, filter=None):\n    \"\"\"\n    Same as `attr.astuple`, except that collections types are always retained\n    and `tuple` is always used as the *tuple_factory*.\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _astuple(\n        inst=inst, recurse=recurse, filter=filter, retain_collection_types=True\n    )\n"
  },
  {
    "path": "vendor/attr/_version_info.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\nfrom functools import total_ordering\n\nfrom ._funcs import astuple\nfrom ._make import attrib, attrs\n\n\n@total_ordering\n@attrs(eq=False, order=False, slots=True, frozen=True)\nclass VersionInfo(object):\n    \"\"\"\n    A version object that can be compared to tuple of length 1--4:\n\n    >>> attr.VersionInfo(19, 1, 0, \"final\")  <= (19, 2)\n    True\n    >>> attr.VersionInfo(19, 1, 0, \"final\") < (19, 1, 1)\n    True\n    >>> vi = attr.VersionInfo(19, 2, 0, \"final\")\n    >>> vi < (19, 1, 1)\n    False\n    >>> vi < (19,)\n    False\n    >>> vi == (19, 2,)\n    True\n    >>> vi == (19, 2, 1)\n    False\n\n    .. versionadded:: 19.2\n    \"\"\"\n\n    year = attrib(type=int)\n    minor = attrib(type=int)\n    micro = attrib(type=int)\n    releaselevel = attrib(type=str)\n\n    @classmethod\n    def _from_version_string(cls, s):\n        \"\"\"\n        Parse *s* and return a _VersionInfo.\n        \"\"\"\n        v = s.split(\".\")\n        if len(v) == 3:\n            v.append(\"final\")\n\n        return cls(\n            year=int(v[0]), minor=int(v[1]), micro=int(v[2]), releaselevel=v[3]\n        )\n\n    def _ensure_tuple(self, other):\n        \"\"\"\n        Ensure *other* is a tuple of a valid length.\n\n        Returns a possibly transformed *other* and ourselves as a tuple of\n        the same length as *other*.\n        \"\"\"\n\n        if self.__class__ is other.__class__:\n            other = astuple(other)\n\n        if not isinstance(other, tuple):\n            raise NotImplementedError\n\n        if not (1 <= len(other) <= 4):\n            raise NotImplementedError\n\n        return astuple(self)[: len(other)], other\n\n    def __eq__(self, other):\n        try:\n            us, them = self._ensure_tuple(other)\n        except NotImplementedError:\n            return NotImplemented\n\n        return us == them\n\n    def __lt__(self, other):\n        try:\n            us, them = self._ensure_tuple(other)\n        except NotImplementedError:\n            return NotImplemented\n\n        # Since alphabetically \"dev0\" < \"final\" < \"post1\" < \"post2\", we don't\n        # have to do anything special with releaselevel for now.\n        return us < them\n"
  },
  {
    "path": "vendor/attr/converters.py",
    "content": "# SPDX-License-Identifier: MIT\n\n\"\"\"\nCommonly useful converters.\n\"\"\"\n\nfrom __future__ import absolute_import, division, print_function\n\nfrom ._compat import PY2\nfrom ._make import NOTHING, Factory, pipe\n\n\nif not PY2:\n    import inspect\n    import typing\n\n\n__all__ = [\n    \"default_if_none\",\n    \"optional\",\n    \"pipe\",\n    \"to_bool\",\n]\n\n\ndef optional(converter):\n    \"\"\"\n    A converter that allows an attribute to be optional. An optional attribute\n    is one which can be set to ``None``.\n\n    Type annotations will be inferred from the wrapped converter's, if it\n    has any.\n\n    :param callable converter: the converter that is used for non-``None``\n        values.\n\n    .. versionadded:: 17.1.0\n    \"\"\"\n\n    def optional_converter(val):\n        if val is None:\n            return None\n        return converter(val)\n\n    if not PY2:\n        sig = None\n        try:\n            sig = inspect.signature(converter)\n        except (ValueError, TypeError):  # inspect failed\n            pass\n        if sig:\n            params = list(sig.parameters.values())\n            if params and params[0].annotation is not inspect.Parameter.empty:\n                optional_converter.__annotations__[\"val\"] = typing.Optional[\n                    params[0].annotation\n                ]\n            if sig.return_annotation is not inspect.Signature.empty:\n                optional_converter.__annotations__[\"return\"] = typing.Optional[\n                    sig.return_annotation\n                ]\n\n    return optional_converter\n\n\ndef default_if_none(default=NOTHING, factory=None):\n    \"\"\"\n    A converter that allows to replace ``None`` values by *default* or the\n    result of *factory*.\n\n    :param default: Value to be used if ``None`` is passed. Passing an instance\n       of `attrs.Factory` is supported, however the ``takes_self`` option\n       is *not*.\n    :param callable factory: A callable that takes no parameters whose result\n       is used if ``None`` is passed.\n\n    :raises TypeError: If **neither** *default* or *factory* is passed.\n    :raises TypeError: If **both** *default* and *factory* are passed.\n    :raises ValueError: If an instance of `attrs.Factory` is passed with\n       ``takes_self=True``.\n\n    .. versionadded:: 18.2.0\n    \"\"\"\n    if default is NOTHING and factory is None:\n        raise TypeError(\"Must pass either `default` or `factory`.\")\n\n    if default is not NOTHING and factory is not None:\n        raise TypeError(\n            \"Must pass either `default` or `factory` but not both.\"\n        )\n\n    if factory is not None:\n        default = Factory(factory)\n\n    if isinstance(default, Factory):\n        if default.takes_self:\n            raise ValueError(\n                \"`takes_self` is not supported by default_if_none.\"\n            )\n\n        def default_if_none_converter(val):\n            if val is not None:\n                return val\n\n            return default.factory()\n\n    else:\n\n        def default_if_none_converter(val):\n            if val is not None:\n                return val\n\n            return default\n\n    return default_if_none_converter\n\n\ndef to_bool(val):\n    \"\"\"\n    Convert \"boolean\" strings (e.g., from env. vars.) to real booleans.\n\n    Values mapping to :code:`True`:\n\n    - :code:`True`\n    - :code:`\"true\"` / :code:`\"t\"`\n    - :code:`\"yes\"` / :code:`\"y\"`\n    - :code:`\"on\"`\n    - :code:`\"1\"`\n    - :code:`1`\n\n    Values mapping to :code:`False`:\n\n    - :code:`False`\n    - :code:`\"false\"` / :code:`\"f\"`\n    - :code:`\"no\"` / :code:`\"n\"`\n    - :code:`\"off\"`\n    - :code:`\"0\"`\n    - :code:`0`\n\n    :raises ValueError: for any other value.\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    if isinstance(val, str):\n        val = val.lower()\n    truthy = {True, \"true\", \"t\", \"yes\", \"y\", \"on\", \"1\", 1}\n    falsy = {False, \"false\", \"f\", \"no\", \"n\", \"off\", \"0\", 0}\n    try:\n        if val in truthy:\n            return True\n        if val in falsy:\n            return False\n    except TypeError:\n        # Raised when \"val\" is not hashable (e.g., lists)\n        pass\n    raise ValueError(\"Cannot convert value to bool: {}\".format(val))\n"
  },
  {
    "path": "vendor/attr/exceptions.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom __future__ import absolute_import, division, print_function\n\n\nclass FrozenError(AttributeError):\n    \"\"\"\n    A frozen/immutable instance or attribute have been attempted to be\n    modified.\n\n    It mirrors the behavior of ``namedtuples`` by using the same error message\n    and subclassing `AttributeError`.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n\n    msg = \"can't set attribute\"\n    args = [msg]\n\n\nclass FrozenInstanceError(FrozenError):\n    \"\"\"\n    A frozen instance has been attempted to be modified.\n\n    .. versionadded:: 16.1.0\n    \"\"\"\n\n\nclass FrozenAttributeError(FrozenError):\n    \"\"\"\n    A frozen attribute has been attempted to be modified.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n\n\nclass AttrsAttributeNotFoundError(ValueError):\n    \"\"\"\n    An ``attrs`` function couldn't find an attribute that the user asked for.\n\n    .. versionadded:: 16.2.0\n    \"\"\"\n\n\nclass NotAnAttrsClassError(ValueError):\n    \"\"\"\n    A non-``attrs`` class has been passed into an ``attrs`` function.\n\n    .. versionadded:: 16.2.0\n    \"\"\"\n\n\nclass DefaultAlreadySetError(RuntimeError):\n    \"\"\"\n    A default has been set using ``attr.ib()`` and is attempted to be reset\n    using the decorator.\n\n    .. versionadded:: 17.1.0\n    \"\"\"\n\n\nclass UnannotatedAttributeError(RuntimeError):\n    \"\"\"\n    A class with ``auto_attribs=True`` has an ``attr.ib()`` without a type\n    annotation.\n\n    .. versionadded:: 17.3.0\n    \"\"\"\n\n\nclass PythonTooOldError(RuntimeError):\n    \"\"\"\n    It was attempted to use an ``attrs`` feature that requires a newer Python\n    version.\n\n    .. versionadded:: 18.2.0\n    \"\"\"\n\n\nclass NotCallableError(TypeError):\n    \"\"\"\n    A ``attr.ib()`` requiring a callable has been set with a value\n    that is not callable.\n\n    .. versionadded:: 19.2.0\n    \"\"\"\n\n    def __init__(self, msg, value):\n        super(TypeError, self).__init__(msg, value)\n        self.msg = msg\n        self.value = value\n\n    def __str__(self):\n        return str(self.msg)\n"
  },
  {
    "path": "vendor/attr/filters.py",
    "content": "# SPDX-License-Identifier: MIT\n\n\"\"\"\nCommonly useful filters for `attr.asdict`.\n\"\"\"\n\nfrom __future__ import absolute_import, division, print_function\n\nfrom ._compat import isclass\nfrom ._make import Attribute\n\n\ndef _split_what(what):\n    \"\"\"\n    Returns a tuple of `frozenset`s of classes and attributes.\n    \"\"\"\n    return (\n        frozenset(cls for cls in what if isclass(cls)),\n        frozenset(cls for cls in what if isinstance(cls, Attribute)),\n    )\n\n\ndef include(*what):\n    \"\"\"\n    Include *what*.\n\n    :param what: What to include.\n    :type what: `list` of `type` or `attrs.Attribute`\\\\ s\n\n    :rtype: `callable`\n    \"\"\"\n    cls, attrs = _split_what(what)\n\n    def include_(attribute, value):\n        return value.__class__ in cls or attribute in attrs\n\n    return include_\n\n\ndef exclude(*what):\n    \"\"\"\n    Exclude *what*.\n\n    :param what: What to exclude.\n    :type what: `list` of classes or `attrs.Attribute`\\\\ s.\n\n    :rtype: `callable`\n    \"\"\"\n    cls, attrs = _split_what(what)\n\n    def exclude_(attribute, value):\n        return value.__class__ not in cls and attribute not in attrs\n\n    return exclude_\n"
  },
  {
    "path": "vendor/attr/py.typed",
    "content": ""
  },
  {
    "path": "vendor/attr/setters.py",
    "content": "# SPDX-License-Identifier: MIT\n\n\"\"\"\nCommonly used hooks for on_setattr.\n\"\"\"\n\nfrom __future__ import absolute_import, division, print_function\n\nfrom . import _config\nfrom .exceptions import FrozenAttributeError\n\n\ndef pipe(*setters):\n    \"\"\"\n    Run all *setters* and return the return value of the last one.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n\n    def wrapped_pipe(instance, attrib, new_value):\n        rv = new_value\n\n        for setter in setters:\n            rv = setter(instance, attrib, rv)\n\n        return rv\n\n    return wrapped_pipe\n\n\ndef frozen(_, __, ___):\n    \"\"\"\n    Prevent an attribute to be modified.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n    raise FrozenAttributeError()\n\n\ndef validate(instance, attrib, new_value):\n    \"\"\"\n    Run *attrib*'s validator on *new_value* if it has one.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n    if _config._run_validators is False:\n        return new_value\n\n    v = attrib.validator\n    if not v:\n        return new_value\n\n    v(instance, attrib, new_value)\n\n    return new_value\n\n\ndef convert(instance, attrib, new_value):\n    \"\"\"\n    Run *attrib*'s converter -- if it has one --  on *new_value* and return the\n    result.\n\n    .. versionadded:: 20.1.0\n    \"\"\"\n    c = attrib.converter\n    if c:\n        return c(new_value)\n\n    return new_value\n\n\nNO_OP = object()\n\"\"\"\nSentinel for disabling class-wide *on_setattr* hooks for certain attributes.\n\nDoes not work in `pipe` or within lists.\n\n.. versionadded:: 20.1.0\n\"\"\"\n"
  },
  {
    "path": "vendor/attr/validators.py",
    "content": "# SPDX-License-Identifier: MIT\n\n\"\"\"\nCommonly useful validators.\n\"\"\"\n\nfrom __future__ import absolute_import, division, print_function\n\nimport operator\nimport re\n\nfrom contextlib import contextmanager\n\nfrom ._config import get_run_validators, set_run_validators\nfrom ._make import _AndValidator, and_, attrib, attrs\nfrom .exceptions import NotCallableError\n\n\ntry:\n    Pattern = re.Pattern\nexcept AttributeError:  # Python <3.7 lacks a Pattern type.\n    Pattern = type(re.compile(\"\"))\n\n\n__all__ = [\n    \"and_\",\n    \"deep_iterable\",\n    \"deep_mapping\",\n    \"disabled\",\n    \"ge\",\n    \"get_disabled\",\n    \"gt\",\n    \"in_\",\n    \"instance_of\",\n    \"is_callable\",\n    \"le\",\n    \"lt\",\n    \"matches_re\",\n    \"max_len\",\n    \"optional\",\n    \"provides\",\n    \"set_disabled\",\n]\n\n\ndef set_disabled(disabled):\n    \"\"\"\n    Globally disable or enable running validators.\n\n    By default, they are run.\n\n    :param disabled: If ``True``, disable running all validators.\n    :type disabled: bool\n\n    .. warning::\n\n        This function is not thread-safe!\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    set_run_validators(not disabled)\n\n\ndef get_disabled():\n    \"\"\"\n    Return a bool indicating whether validators are currently disabled or not.\n\n    :return: ``True`` if validators are currently disabled.\n    :rtype: bool\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return not get_run_validators()\n\n\n@contextmanager\ndef disabled():\n    \"\"\"\n    Context manager that disables running validators within its context.\n\n    .. warning::\n\n        This context manager is not thread-safe!\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    set_run_validators(False)\n    try:\n        yield\n    finally:\n        set_run_validators(True)\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _InstanceOfValidator(object):\n    type = attrib()\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if not isinstance(value, self.type):\n            raise TypeError(\n                \"'{name}' must be {type!r} (got {value!r} that is a \"\n                \"{actual!r}).\".format(\n                    name=attr.name,\n                    type=self.type,\n                    actual=value.__class__,\n                    value=value,\n                ),\n                attr,\n                self.type,\n                value,\n            )\n\n    def __repr__(self):\n        return \"<instance_of validator for type {type!r}>\".format(\n            type=self.type\n        )\n\n\ndef instance_of(type):\n    \"\"\"\n    A validator that raises a `TypeError` if the initializer is called\n    with a wrong type for this particular attribute (checks are performed using\n    `isinstance` therefore it's also valid to pass a tuple of types).\n\n    :param type: The type to check for.\n    :type type: type or tuple of types\n\n    :raises TypeError: With a human readable error message, the attribute\n        (of type `attrs.Attribute`), the expected type, and the value it\n        got.\n    \"\"\"\n    return _InstanceOfValidator(type)\n\n\n@attrs(repr=False, frozen=True, slots=True)\nclass _MatchesReValidator(object):\n    pattern = attrib()\n    match_func = attrib()\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if not self.match_func(value):\n            raise ValueError(\n                \"'{name}' must match regex {pattern!r}\"\n                \" ({value!r} doesn't)\".format(\n                    name=attr.name, pattern=self.pattern.pattern, value=value\n                ),\n                attr,\n                self.pattern,\n                value,\n            )\n\n    def __repr__(self):\n        return \"<matches_re validator for pattern {pattern!r}>\".format(\n            pattern=self.pattern\n        )\n\n\ndef matches_re(regex, flags=0, func=None):\n    r\"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a string that doesn't match *regex*.\n\n    :param regex: a regex string or precompiled pattern to match against\n    :param int flags: flags that will be passed to the underlying re function\n        (default 0)\n    :param callable func: which underlying `re` function to call (options\n        are `re.fullmatch`, `re.search`, `re.match`, default\n        is ``None`` which means either `re.fullmatch` or an emulation of\n        it on Python 2). For performance reasons, they won't be used directly\n        but on a pre-`re.compile`\\ ed pattern.\n\n    .. versionadded:: 19.2.0\n    .. versionchanged:: 21.3.0 *regex* can be a pre-compiled pattern.\n    \"\"\"\n    fullmatch = getattr(re, \"fullmatch\", None)\n    valid_funcs = (fullmatch, None, re.search, re.match)\n    if func not in valid_funcs:\n        raise ValueError(\n            \"'func' must be one of {}.\".format(\n                \", \".join(\n                    sorted(\n                        e and e.__name__ or \"None\" for e in set(valid_funcs)\n                    )\n                )\n            )\n        )\n\n    if isinstance(regex, Pattern):\n        if flags:\n            raise TypeError(\n                \"'flags' can only be used with a string pattern; \"\n                \"pass flags to re.compile() instead\"\n            )\n        pattern = regex\n    else:\n        pattern = re.compile(regex, flags)\n\n    if func is re.match:\n        match_func = pattern.match\n    elif func is re.search:\n        match_func = pattern.search\n    elif fullmatch:\n        match_func = pattern.fullmatch\n    else:  # Python 2 fullmatch emulation (https://bugs.python.org/issue16203)\n        pattern = re.compile(\n            r\"(?:{})\\Z\".format(pattern.pattern), pattern.flags\n        )\n        match_func = pattern.match\n\n    return _MatchesReValidator(pattern, match_func)\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _ProvidesValidator(object):\n    interface = attrib()\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if not self.interface.providedBy(value):\n            raise TypeError(\n                \"'{name}' must provide {interface!r} which {value!r} \"\n                \"doesn't.\".format(\n                    name=attr.name, interface=self.interface, value=value\n                ),\n                attr,\n                self.interface,\n                value,\n            )\n\n    def __repr__(self):\n        return \"<provides validator for interface {interface!r}>\".format(\n            interface=self.interface\n        )\n\n\ndef provides(interface):\n    \"\"\"\n    A validator that raises a `TypeError` if the initializer is called\n    with an object that does not provide the requested *interface* (checks are\n    performed using ``interface.providedBy(value)`` (see `zope.interface\n    <https://zopeinterface.readthedocs.io/en/latest/>`_).\n\n    :param interface: The interface to check for.\n    :type interface: ``zope.interface.Interface``\n\n    :raises TypeError: With a human readable error message, the attribute\n        (of type `attrs.Attribute`), the expected interface, and the\n        value it got.\n    \"\"\"\n    return _ProvidesValidator(interface)\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _OptionalValidator(object):\n    validator = attrib()\n\n    def __call__(self, inst, attr, value):\n        if value is None:\n            return\n\n        self.validator(inst, attr, value)\n\n    def __repr__(self):\n        return \"<optional validator for {what} or None>\".format(\n            what=repr(self.validator)\n        )\n\n\ndef optional(validator):\n    \"\"\"\n    A validator that makes an attribute optional.  An optional attribute is one\n    which can be set to ``None`` in addition to satisfying the requirements of\n    the sub-validator.\n\n    :param validator: A validator (or a list of validators) that is used for\n        non-``None`` values.\n    :type validator: callable or `list` of callables.\n\n    .. versionadded:: 15.1.0\n    .. versionchanged:: 17.1.0 *validator* can be a list of validators.\n    \"\"\"\n    if isinstance(validator, list):\n        return _OptionalValidator(_AndValidator(validator))\n    return _OptionalValidator(validator)\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _InValidator(object):\n    options = attrib()\n\n    def __call__(self, inst, attr, value):\n        try:\n            in_options = value in self.options\n        except TypeError:  # e.g. `1 in \"abc\"`\n            in_options = False\n\n        if not in_options:\n            raise ValueError(\n                \"'{name}' must be in {options!r} (got {value!r})\".format(\n                    name=attr.name, options=self.options, value=value\n                )\n            )\n\n    def __repr__(self):\n        return \"<in_ validator with options {options!r}>\".format(\n            options=self.options\n        )\n\n\ndef in_(options):\n    \"\"\"\n    A validator that raises a `ValueError` if the initializer is called\n    with a value that does not belong in the options provided.  The check is\n    performed using ``value in options``.\n\n    :param options: Allowed options.\n    :type options: list, tuple, `enum.Enum`, ...\n\n    :raises ValueError: With a human readable error message, the attribute (of\n       type `attrs.Attribute`), the expected options, and the value it\n       got.\n\n    .. versionadded:: 17.1.0\n    \"\"\"\n    return _InValidator(options)\n\n\n@attrs(repr=False, slots=False, hash=True)\nclass _IsCallableValidator(object):\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if not callable(value):\n            message = (\n                \"'{name}' must be callable \"\n                \"(got {value!r} that is a {actual!r}).\"\n            )\n            raise NotCallableError(\n                msg=message.format(\n                    name=attr.name, value=value, actual=value.__class__\n                ),\n                value=value,\n            )\n\n    def __repr__(self):\n        return \"<is_callable validator>\"\n\n\ndef is_callable():\n    \"\"\"\n    A validator that raises a `attr.exceptions.NotCallableError` if the\n    initializer is called with a value for this particular attribute\n    that is not callable.\n\n    .. versionadded:: 19.1.0\n\n    :raises `attr.exceptions.NotCallableError`: With a human readable error\n        message containing the attribute (`attrs.Attribute`) name,\n        and the value it got.\n    \"\"\"\n    return _IsCallableValidator()\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _DeepIterable(object):\n    member_validator = attrib(validator=is_callable())\n    iterable_validator = attrib(\n        default=None, validator=optional(is_callable())\n    )\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if self.iterable_validator is not None:\n            self.iterable_validator(inst, attr, value)\n\n        for member in value:\n            self.member_validator(inst, attr, member)\n\n    def __repr__(self):\n        iterable_identifier = (\n            \"\"\n            if self.iterable_validator is None\n            else \" {iterable!r}\".format(iterable=self.iterable_validator)\n        )\n        return (\n            \"<deep_iterable validator for{iterable_identifier}\"\n            \" iterables of {member!r}>\"\n        ).format(\n            iterable_identifier=iterable_identifier,\n            member=self.member_validator,\n        )\n\n\ndef deep_iterable(member_validator, iterable_validator=None):\n    \"\"\"\n    A validator that performs deep validation of an iterable.\n\n    :param member_validator: Validator to apply to iterable members\n    :param iterable_validator: Validator to apply to iterable itself\n        (optional)\n\n    .. versionadded:: 19.1.0\n\n    :raises TypeError: if any sub-validators fail\n    \"\"\"\n    return _DeepIterable(member_validator, iterable_validator)\n\n\n@attrs(repr=False, slots=True, hash=True)\nclass _DeepMapping(object):\n    key_validator = attrib(validator=is_callable())\n    value_validator = attrib(validator=is_callable())\n    mapping_validator = attrib(default=None, validator=optional(is_callable()))\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if self.mapping_validator is not None:\n            self.mapping_validator(inst, attr, value)\n\n        for key in value:\n            self.key_validator(inst, attr, key)\n            self.value_validator(inst, attr, value[key])\n\n    def __repr__(self):\n        return (\n            \"<deep_mapping validator for objects mapping {key!r} to {value!r}>\"\n        ).format(key=self.key_validator, value=self.value_validator)\n\n\ndef deep_mapping(key_validator, value_validator, mapping_validator=None):\n    \"\"\"\n    A validator that performs deep validation of a dictionary.\n\n    :param key_validator: Validator to apply to dictionary keys\n    :param value_validator: Validator to apply to dictionary values\n    :param mapping_validator: Validator to apply to top-level mapping\n        attribute (optional)\n\n    .. versionadded:: 19.1.0\n\n    :raises TypeError: if any sub-validators fail\n    \"\"\"\n    return _DeepMapping(key_validator, value_validator, mapping_validator)\n\n\n@attrs(repr=False, frozen=True, slots=True)\nclass _NumberValidator(object):\n    bound = attrib()\n    compare_op = attrib()\n    compare_func = attrib()\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if not self.compare_func(value, self.bound):\n            raise ValueError(\n                \"'{name}' must be {op} {bound}: {value}\".format(\n                    name=attr.name,\n                    op=self.compare_op,\n                    bound=self.bound,\n                    value=value,\n                )\n            )\n\n    def __repr__(self):\n        return \"<Validator for x {op} {bound}>\".format(\n            op=self.compare_op, bound=self.bound\n        )\n\n\ndef lt(val):\n    \"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a number larger or equal to *val*.\n\n    :param val: Exclusive upper bound for values\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _NumberValidator(val, \"<\", operator.lt)\n\n\ndef le(val):\n    \"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a number greater than *val*.\n\n    :param val: Inclusive upper bound for values\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _NumberValidator(val, \"<=\", operator.le)\n\n\ndef ge(val):\n    \"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a number smaller than *val*.\n\n    :param val: Inclusive lower bound for values\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _NumberValidator(val, \">=\", operator.ge)\n\n\ndef gt(val):\n    \"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a number smaller or equal to *val*.\n\n    :param val: Exclusive lower bound for values\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _NumberValidator(val, \">\", operator.gt)\n\n\n@attrs(repr=False, frozen=True, slots=True)\nclass _MaxLengthValidator(object):\n    max_length = attrib()\n\n    def __call__(self, inst, attr, value):\n        \"\"\"\n        We use a callable class to be able to change the ``__repr__``.\n        \"\"\"\n        if len(value) > self.max_length:\n            raise ValueError(\n                \"Length of '{name}' must be <= {max}: {len}\".format(\n                    name=attr.name, max=self.max_length, len=len(value)\n                )\n            )\n\n    def __repr__(self):\n        return \"<max_len validator for {max}>\".format(max=self.max_length)\n\n\ndef max_len(length):\n    \"\"\"\n    A validator that raises `ValueError` if the initializer is called\n    with a string or iterable that is longer than *length*.\n\n    :param int length: Maximum length of the string or iterable\n\n    .. versionadded:: 21.3.0\n    \"\"\"\n    return _MaxLengthValidator(length)\n"
  },
  {
    "path": "vendor/attrs/__init__.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr import (\n    NOTHING,\n    Attribute,\n    Factory,\n    __author__,\n    __copyright__,\n    __description__,\n    __doc__,\n    __email__,\n    __license__,\n    __title__,\n    __url__,\n    __version__,\n    __version_info__,\n    assoc,\n    cmp_using,\n    define,\n    evolve,\n    field,\n    fields,\n    fields_dict,\n    frozen,\n    has,\n    make_class,\n    mutable,\n    resolve_types,\n    validate,\n)\nfrom attr._next_gen import asdict, astuple\n\nfrom . import converters, exceptions, filters, setters, validators\n\n\n__all__ = [\n    \"__author__\",\n    \"__copyright__\",\n    \"__description__\",\n    \"__doc__\",\n    \"__email__\",\n    \"__license__\",\n    \"__title__\",\n    \"__url__\",\n    \"__version__\",\n    \"__version_info__\",\n    \"asdict\",\n    \"assoc\",\n    \"astuple\",\n    \"Attribute\",\n    \"cmp_using\",\n    \"converters\",\n    \"define\",\n    \"evolve\",\n    \"exceptions\",\n    \"Factory\",\n    \"field\",\n    \"fields_dict\",\n    \"fields\",\n    \"filters\",\n    \"frozen\",\n    \"has\",\n    \"make_class\",\n    \"mutable\",\n    \"NOTHING\",\n    \"resolve_types\",\n    \"setters\",\n    \"validate\",\n    \"validators\",\n]\n"
  },
  {
    "path": "vendor/attrs/converters.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr.converters import *  # noqa\n"
  },
  {
    "path": "vendor/attrs/exceptions.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr.exceptions import *  # noqa\n"
  },
  {
    "path": "vendor/attrs/filters.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr.filters import *  # noqa\n"
  },
  {
    "path": "vendor/attrs/py.typed",
    "content": ""
  },
  {
    "path": "vendor/attrs/setters.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr.setters import *  # noqa\n"
  },
  {
    "path": "vendor/attrs/validators.py",
    "content": "# SPDX-License-Identifier: MIT\n\nfrom attr.validators import *  # noqa\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/AUTHORS.rst",
    "content": "Credits\n=======\n\n``attrs`` is written and maintained by `Hynek Schlawack <https://hynek.me/>`_.\n\nThe development is kindly supported by `Variomedia AG <https://www.variomedia.de/>`_.\n\nA full list of contributors can be found in `GitHub's overview <https://github.com/python-attrs/attrs/graphs/contributors>`_.\n\nIt’s the spiritual successor of `characteristic <https://characteristic.readthedocs.io/>`_ and aspires to fix some of it clunkiness and unfortunate decisions.\nBoth were inspired by Twisted’s `FancyEqMixin <https://twistedmatrix.com/documents/current/api/twisted.python.util.FancyEqMixin.html>`_ but both are implemented using class decorators because `subclassing is bad for you <https://www.youtube.com/watch?v=3MNVP9-hglc>`_, m’kay?\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/INSTALLER",
    "content": "pip\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Hynek Schlawack\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/METADATA",
    "content": "Metadata-Version: 2.1\nName: attrs\nVersion: 21.4.0\nSummary: Classes Without Boilerplate\nHome-page: https://www.attrs.org/\nAuthor: Hynek Schlawack\nAuthor-email: hs@ox.cx\nMaintainer: Hynek Schlawack\nMaintainer-email: hs@ox.cx\nLicense: MIT\nProject-URL: Documentation, https://www.attrs.org/\nProject-URL: Changelog, https://www.attrs.org/en/stable/changelog.html\nProject-URL: Bug Tracker, https://github.com/python-attrs/attrs/issues\nProject-URL: Source Code, https://github.com/python-attrs/attrs\nProject-URL: Funding, https://github.com/sponsors/hynek\nProject-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi\nProject-URL: Ko-fi, https://ko-fi.com/the_hynek\nKeywords: class,attribute,boilerplate\nPlatform: UNKNOWN\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Intended Audience :: Developers\nClassifier: Natural Language :: English\nClassifier: License :: OSI Approved :: MIT License\nClassifier: Operating System :: OS Independent\nClassifier: Programming Language :: Python\nClassifier: Programming Language :: Python :: 2\nClassifier: Programming Language :: Python :: 2.7\nClassifier: Programming Language :: Python :: 3\nClassifier: Programming Language :: Python :: 3.5\nClassifier: Programming Language :: Python :: 3.6\nClassifier: Programming Language :: Python :: 3.7\nClassifier: Programming Language :: Python :: 3.8\nClassifier: Programming Language :: Python :: 3.9\nClassifier: Programming Language :: Python :: 3.10\nClassifier: Programming Language :: Python :: Implementation :: CPython\nClassifier: Programming Language :: Python :: Implementation :: PyPy\nClassifier: Topic :: Software Development :: Libraries :: Python Modules\nRequires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*\nDescription-Content-Type: text/x-rst\nLicense-File: LICENSE\nLicense-File: AUTHORS.rst\nProvides-Extra: dev\nRequires-Dist: coverage[toml] (>=5.0.2) ; extra == 'dev'\nRequires-Dist: hypothesis ; extra == 'dev'\nRequires-Dist: pympler ; extra == 'dev'\nRequires-Dist: pytest (>=4.3.0) ; extra == 'dev'\nRequires-Dist: six ; extra == 'dev'\nRequires-Dist: mypy ; extra == 'dev'\nRequires-Dist: pytest-mypy-plugins ; extra == 'dev'\nRequires-Dist: zope.interface ; extra == 'dev'\nRequires-Dist: furo ; extra == 'dev'\nRequires-Dist: sphinx ; extra == 'dev'\nRequires-Dist: sphinx-notfound-page ; extra == 'dev'\nRequires-Dist: pre-commit ; extra == 'dev'\nRequires-Dist: cloudpickle ; (platform_python_implementation == \"CPython\") and extra == 'dev'\nProvides-Extra: docs\nRequires-Dist: furo ; extra == 'docs'\nRequires-Dist: sphinx ; extra == 'docs'\nRequires-Dist: zope.interface ; extra == 'docs'\nRequires-Dist: sphinx-notfound-page ; extra == 'docs'\nProvides-Extra: tests\nRequires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests'\nRequires-Dist: hypothesis ; extra == 'tests'\nRequires-Dist: pympler ; extra == 'tests'\nRequires-Dist: pytest (>=4.3.0) ; extra == 'tests'\nRequires-Dist: six ; extra == 'tests'\nRequires-Dist: mypy ; extra == 'tests'\nRequires-Dist: pytest-mypy-plugins ; extra == 'tests'\nRequires-Dist: zope.interface ; extra == 'tests'\nRequires-Dist: cloudpickle ; (platform_python_implementation == \"CPython\") and extra == 'tests'\nProvides-Extra: tests_no_zope\nRequires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests_no_zope'\nRequires-Dist: hypothesis ; extra == 'tests_no_zope'\nRequires-Dist: pympler ; extra == 'tests_no_zope'\nRequires-Dist: pytest (>=4.3.0) ; extra == 'tests_no_zope'\nRequires-Dist: six ; extra == 'tests_no_zope'\nRequires-Dist: mypy ; extra == 'tests_no_zope'\nRequires-Dist: pytest-mypy-plugins ; extra == 'tests_no_zope'\nRequires-Dist: cloudpickle ; (platform_python_implementation == \"CPython\") and extra == 'tests_no_zope'\n\n\n.. image:: https://www.attrs.org/en/stable/_static/attrs_logo.png\n   :alt: attrs logo\n   :align: center\n\n\n``attrs`` is the Python package that will bring back the **joy** of **writing classes** by relieving you from the drudgery of implementing object protocols (aka `dunder methods <https://www.attrs.org/en/latest/glossary.html#term-dunder-methods>`_).\n`Trusted by NASA <https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile#list-of-qualifying-repositories-for-mars-2020-helicopter-contributor-badge>`_ for Mars missions since 2020!\n\nIts main goal is to help you to write **concise** and **correct** software without slowing down your code.\n\n.. teaser-end\n\nFor that, it gives you a class decorator and a way to declaratively define the attributes on that class:\n\n.. -code-begin-\n\n.. code-block:: pycon\n\n   >>> from attrs import asdict, define, make_class, Factory\n\n   >>> @define\n   ... class SomeClass:\n   ...     a_number: int = 42\n   ...     list_of_numbers: list[int] = Factory(list)\n   ...\n   ...     def hard_math(self, another_number):\n   ...         return self.a_number + sum(self.list_of_numbers) * another_number\n\n\n   >>> sc = SomeClass(1, [1, 2, 3])\n   >>> sc\n   SomeClass(a_number=1, list_of_numbers=[1, 2, 3])\n\n   >>> sc.hard_math(3)\n   19\n   >>> sc == SomeClass(1, [1, 2, 3])\n   True\n   >>> sc != SomeClass(2, [3, 2, 1])\n   True\n\n   >>> asdict(sc)\n   {'a_number': 1, 'list_of_numbers': [1, 2, 3]}\n\n   >>> SomeClass()\n   SomeClass(a_number=42, list_of_numbers=[])\n\n   >>> C = make_class(\"C\", [\"a\", \"b\"])\n   >>> C(\"foo\", \"bar\")\n   C(a='foo', b='bar')\n\n\nAfter *declaring* your attributes ``attrs`` gives you:\n\n- a concise and explicit overview of the class's attributes,\n- a nice human-readable ``__repr__``,\n- a equality-checking methods,\n- an initializer,\n- and much more,\n\n*without* writing dull boilerplate code again and again and *without* runtime performance penalties.\n\n**Hate type annotations**!?\nNo problem!\nTypes are entirely **optional** with ``attrs``.\nSimply assign ``attrs.field()`` to the attributes instead of annotating them with types.\n\n----\n\nThis example uses ``attrs``'s modern APIs that have been introduced in version 20.1.0, and the ``attrs`` package import name that has been added in version 21.3.0.\nThe classic APIs (``@attr.s``, ``attr.ib``, plus their serious business aliases) and the ``attr`` package import name will remain **indefinitely**.\n\nPlease check out `On The Core API Names <https://www.attrs.org/en/latest/names.html>`_ for a more in-depth explanation.\n\n\nData Classes\n============\n\nOn the tin, ``attrs`` might remind you of ``dataclasses`` (and indeed, ``dataclasses`` are a descendant of ``attrs``).\nIn practice it does a lot more and is more flexible.\nFor instance it allows you to define `special handling of NumPy arrays for equality checks <https://www.attrs.org/en/stable/comparison.html#customization>`_, or allows more ways to `plug into the initialization process <https://www.attrs.org/en/stable/init.html#hooking-yourself-into-initialization>`_.\n\nFor more details, please refer to our `comparison page <https://www.attrs.org/en/stable/why.html#data-classes>`_.\n\n\n.. -getting-help-\n\nGetting Help\n============\n\nPlease use the ``python-attrs`` tag on `Stack Overflow <https://stackoverflow.com/questions/tagged/python-attrs>`_ to get help.\n\nAnswering questions of your fellow developers is also a great way to help the project!\n\n\n.. -project-information-\n\nProject Information\n===================\n\n``attrs`` is released under the `MIT <https://choosealicense.com/licenses/mit/>`_ license,\nits documentation lives at `Read the Docs <https://www.attrs.org/>`_,\nthe code on `GitHub <https://github.com/python-attrs/attrs>`_,\nand the latest release on `PyPI <https://pypi.org/project/attrs/>`_.\nIt’s rigorously tested on Python 2.7, 3.5+, and PyPy.\n\nWe collect information on **third-party extensions** in our `wiki <https://github.com/python-attrs/attrs/wiki/Extensions-to-attrs>`_.\nFeel free to browse and add your own!\n\nIf you'd like to contribute to ``attrs`` you're most welcome and we've written `a little guide <https://github.com/python-attrs/attrs/blob/main/.github/CONTRIBUTING.md>`_ to get you started!\n\n\n``attrs`` for Enterprise\n------------------------\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of ``attrs`` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications.\nSave time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use.\n`Learn more. <https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=referral&utm_campaign=enterprise&utm_term=repo>`_\n\n\nRelease Information\n===================\n\n21.4.0 (2021-12-29)\n-------------------\n\nChanges\n^^^^^^^\n\n- Fixed the test suite on PyPy3.8 where ``cloudpickle`` does not work.\n  `#892 <https://github.com/python-attrs/attrs/issues/892>`_\n- Fixed ``coverage report`` for projects that use ``attrs`` and don't set a ``--source``.\n  `#895 <https://github.com/python-attrs/attrs/issues/895>`_,\n  `#896 <https://github.com/python-attrs/attrs/issues/896>`_\n\n`Full changelog <https://www.attrs.org/en/stable/changelog.html>`_.\n\nCredits\n=======\n\n``attrs`` is written and maintained by `Hynek Schlawack <https://hynek.me/>`_.\n\nThe development is kindly supported by `Variomedia AG <https://www.variomedia.de/>`_.\n\nA full list of contributors can be found in `GitHub's overview <https://github.com/python-attrs/attrs/graphs/contributors>`_.\n\nIt’s the spiritual successor of `characteristic <https://characteristic.readthedocs.io/>`_ and aspires to fix some of it clunkiness and unfortunate decisions.\nBoth were inspired by Twisted’s `FancyEqMixin <https://twistedmatrix.com/documents/current/api/twisted.python.util.FancyEqMixin.html>`_ but both are implemented using class decorators because `subclassing is bad for you <https://www.youtube.com/watch?v=3MNVP9-hglc>`_, m’kay?\n\n\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/RECORD",
    "content": "attr/__init__.py,sha256=_zhJ4O8Q5KR5gaIrjX73vkR5nA6NjfpMGXQChEdNljI,1667\nattr/__init__.pyc,,\nattr/__init__.pyi,sha256=ubRkstoRHPpQN17iA0OCh8waIwZ5NeJgbz0lwI8XUjY,15100\nattr/_cmp.py,sha256=JP0N7OIyTqIR3prUDfMZOR4DV4tlV_xXf39-bQg7xOo,4165\nattr/_cmp.pyc,,\nattr/_cmp.pyi,sha256=oyjJVytrwwkUJOoe332IiYzp6pCVZEKKcKveH-ev604,317\nattr/_compat.py,sha256=i8u27AAK_4SzQnmTf3aliGV27UdYbJxdZ-O0tOHbLU8,8396\nattr/_compat.pyc,,\nattr/_config.py,sha256=aj1Lh8t2CuVa5nSxgCrLQtg_ZSdO8ZKeNJQd6RvpIp8,892\nattr/_config.pyc,,\nattr/_funcs.py,sha256=sm_D12y2IyRW_bCnR7M-O7U5qHaieXr0BzINwJ7_K38,14753\nattr/_funcs.pyc,,\nattr/_make.py,sha256=D05j0_ckcVIRFn2xHch5SPUCwh3t7WpeFj-3Ku9SocQ,102736\nattr/_make.pyc,,\nattr/_next_gen.py,sha256=s5jCsVEQ4IhOjAykP4N0ETaWpg0RsgQttMvEZErUrhQ,5752\nattr/_version_info.py,sha256=sxD9yNai0jGbur_-RGEQHbgV2YX5_5G9PhrhBA5pA54,2194\nattr/_version_info.pyc,,\nattr/_version_info.pyi,sha256=x_M3L3WuB7r_ULXAWjx959udKQ4HLB8l-hsc1FDGNvk,209\nattr/converters.py,sha256=uiiWTz8GLJe8I1Ty7UICK1DegVUnqHTXbOSnar7g7Nk,4078\nattr/converters.pyc,,\nattr/converters.pyi,sha256=MQo7iEzPNVoFpKqD30sVwgVpdNoIeSCF2nsXvoxLZ-Y,416\nattr/exceptions.py,sha256=BMg7AljkJnvG-irMwL2TBHYlaLBXhSKnzoEWo4e42Zw,1981\nattr/exceptions.pyc,,\nattr/exceptions.pyi,sha256=zZq8bCUnKAy9mDtBEw42ZhPhAUIHoTKedDQInJD883M,539\nattr/filters.py,sha256=JGZgvPGkdOfttkoL6XhXS6ZCoaVV5nZ8GCYeZNUN_mE,1124\nattr/filters.pyc,,\nattr/filters.pyi,sha256=_Sm80jGySETX_Clzdkon5NHVjQWRl3Y3liQKZX1czXc,215\nattr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\nattr/setters.py,sha256=rH_UtQuHgQEC7hfZyMO_SJW0R1Gus7-a83U8igZfqs8,1466\nattr/setters.pyc,,\nattr/setters.pyi,sha256=7dM10rqpQVDW0y-iJUnq8rabdO5Wx2Sbo5LwNa0IXl0,573\nattr/validators.py,sha256=jVE9roaSOmTf0dJNSLHNaQNilkrlzc3pNNBKmv0g7pk,15966\nattr/validators.pyc,,\nattr/validators.pyi,sha256=adn6rNbIXmRXlg_FKrTmWj0dOX0vKTsGG82Jd3YcJbQ,2268\nattrs-21.4.0.dist-info/AUTHORS.rst,sha256=wsqCNbGz_mklcJrt54APIZHZpoTIJLkXqEhhn4Nd8hc,752\nattrs-21.4.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4\nattrs-21.4.0.dist-info/LICENSE,sha256=v2WaKLSSQGAvVrvfSQy-LsUJsVuY-Z17GaUsdA4yeGM,1082\nattrs-21.4.0.dist-info/METADATA,sha256=WwgR4MfxE55PpGGv21UOEOEtXZGCqwekfXYg-JgA5HY,9810\nattrs-21.4.0.dist-info/RECORD,,\nattrs-21.4.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\nattrs-21.4.0.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110\nattrs-21.4.0.dist-info/top_level.txt,sha256=AGbmKnOtYpdkLRsDRQVSBIwfL32pAQ6BSo1mt-BxI7M,11\nattrs/__init__.py,sha256=CeyxLGVViAEKKsLOLaif8vF3vs1a28vsrRVLv7eMEgM,1109\nattrs/__init__.pyc,,\nattrs/__init__.pyi,sha256=57aCxUJukK9lZlrUgk9RuWiBiPY5DzDKJAJkhbrStYw,1982\nattrs/converters.py,sha256=fCBEdlYWcmI3sCnpUk2pz22GYtXzqTkp6NeOpdI64PY,70\nattrs/converters.pyc,,\nattrs/exceptions.py,sha256=SlDli6AY77f6ny-H7oy98OkQjsrw-D_supEuErIVYkE,70\nattrs/exceptions.pyc,,\nattrs/filters.py,sha256=dc_dNey29kH6KLU1mT2Dakq7tZ3kBfzEGwzOmDzw1F8,67\nattrs/filters.pyc,,\nattrs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\nattrs/setters.py,sha256=oKw51C72Hh45wTwYvDHJP9kbicxiMhMR4Y5GvdpKdHQ,67\nattrs/setters.pyc,,\nattrs/validators.py,sha256=4ag1SyVD2Hm3PYKiNG_NOtR_e7f81Hr6GiNl4YvXo4Q,70\nattrs/validators.pyc,,\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/REQUESTED",
    "content": ""
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: bdist_wheel (0.37.1)\nRoot-Is-Purelib: true\nTag: py2-none-any\nTag: py3-none-any\n\n"
  },
  {
    "path": "vendor/attrs-21.4.0.dist-info/top_level.txt",
    "content": "attr\nattrs\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/INSTALLER",
    "content": "pip\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/LICENSE",
    "content": "A. HISTORY OF THE SOFTWARE\n==========================\n\nPython was created in the early 1990s by Guido van Rossum at Stichting\nMathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands\nas a successor of a language called ABC.  Guido remains Python's\nprincipal author, although it includes many contributions from others.\n\nIn 1995, Guido continued his work on Python at the Corporation for\nNational Research Initiatives (CNRI, see http://www.cnri.reston.va.us)\nin Reston, Virginia where he released several versions of the\nsoftware.\n\nIn May 2000, Guido and the Python core development team moved to\nBeOpen.com to form the BeOpen PythonLabs team.  In October of the same\nyear, the PythonLabs team moved to Digital Creations (now Zope\nCorporation, see http://www.zope.com).  In 2001, the Python Software\nFoundation (PSF, see http://www.python.org/psf/) was formed, a\nnon-profit organization created specifically to own Python-related\nIntellectual Property.  Zope Corporation is a sponsoring member of\nthe PSF.\n\nAll Python releases are Open Source (see http://www.opensource.org for\nthe Open Source Definition).  Historically, most, but not all, Python\nreleases have also been GPL-compatible; the table below summarizes\nthe various releases.\n\n    Release         Derived     Year        Owner       GPL-\n                    from                                compatible? (1)\n\n    0.9.0 thru 1.2              1991-1995   CWI         yes\n    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes\n    1.6             1.5.2       2000        CNRI        no\n    2.0             1.6         2000        BeOpen.com  no\n    1.6.1           1.6         2001        CNRI        yes (2)\n    2.1             2.0+1.6.1   2001        PSF         no\n    2.0.1           2.0+1.6.1   2001        PSF         yes\n    2.1.1           2.1+2.0.1   2001        PSF         yes\n    2.1.2           2.1.1       2002        PSF         yes\n    2.1.3           2.1.2       2002        PSF         yes\n    2.2 and above   2.1.1       2001-now    PSF         yes\n\nFootnotes:\n\n(1) GPL-compatible doesn't mean that we're distributing Python under\n    the GPL.  All Python licenses, unlike the GPL, let you distribute\n    a modified version without making your changes open source.  The\n    GPL-compatible licenses make it possible to combine Python with\n    other software that is released under the GPL; the others don't.\n\n(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,\n    because its license has a choice of law clause.  According to\n    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1\n    is \"not incompatible\" with the GPL.\n\nThanks to the many outside volunteers who have worked under Guido's\ndirection to make these releases possible.\n\n\nB. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON\n===============================================================\n\nPYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\n--------------------------------------------\n\n1. This LICENSE AGREEMENT is between the Python Software Foundation\n(\"PSF\"), and the Individual or Organization (\"Licensee\") accessing and\notherwise using this software (\"Python\") in source or binary form and\nits associated documentation.\n\n2. Subject to the terms and conditions of this License Agreement, PSF hereby\ngrants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,\nanalyze, test, perform and/or display publicly, prepare derivative works,\ndistribute, and otherwise use Python alone or in any derivative version,\nprovided, however, that PSF's License Agreement and PSF's notice of copyright,\ni.e., \"Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,\n2011, 2012, 2013, 2014 Python Software Foundation; All Rights Reserved\" are\nretained in Python alone or in any derivative version prepared by Licensee.\n\n3. In the event Licensee prepares a derivative work that is based on\nor incorporates Python or any part thereof, and wants to make\nthe derivative work available to others as provided herein, then\nLicensee hereby agrees to include in any such work a brief summary of\nthe changes made to Python.\n\n4. PSF is making Python available to Licensee on an \"AS IS\"\nbasis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\nFOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\nA RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,\nOR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n6. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n7. Nothing in this License Agreement shall be deemed to create any\nrelationship of agency, partnership, or joint venture between PSF and\nLicensee.  This License Agreement does not grant permission to use PSF\ntrademarks or trade name in a trademark sense to endorse or promote\nproducts or services of Licensee, or any third party.\n\n8. By copying, installing or otherwise using Python, Licensee\nagrees to be bound by the terms and conditions of this License\nAgreement.\n\n\nBEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0\n-------------------------------------------\n\nBEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1\n\n1. This LICENSE AGREEMENT is between BeOpen.com (\"BeOpen\"), having an\noffice at 160 Saratoga Avenue, Santa Clara, CA 95051, and the\nIndividual or Organization (\"Licensee\") accessing and otherwise using\nthis software in source or binary form and its associated\ndocumentation (\"the Software\").\n\n2. Subject to the terms and conditions of this BeOpen Python License\nAgreement, BeOpen hereby grants Licensee a non-exclusive,\nroyalty-free, world-wide license to reproduce, analyze, test, perform\nand/or display publicly, prepare derivative works, distribute, and\notherwise use the Software alone or in any derivative version,\nprovided, however, that the BeOpen Python License is retained in the\nSoftware, alone or in any derivative version prepared by Licensee.\n\n3. BeOpen is making the Software available to Licensee on an \"AS IS\"\nbasis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE\nSOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS\nAS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY\nDERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n5. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n6. This License Agreement shall be governed by and interpreted in all\nrespects by the law of the State of California, excluding conflict of\nlaw provisions.  Nothing in this License Agreement shall be deemed to\ncreate any relationship of agency, partnership, or joint venture\nbetween BeOpen and Licensee.  This License Agreement does not grant\npermission to use BeOpen trademarks or trade names in a trademark\nsense to endorse or promote products or services of Licensee, or any\nthird party.  As an exception, the \"BeOpen Python\" logos available at\nhttp://www.pythonlabs.com/logos.html may be used according to the\npermissions granted on that web page.\n\n7. By copying, installing or otherwise using the software, Licensee\nagrees to be bound by the terms and conditions of this License\nAgreement.\n\n\nCNRI LICENSE AGREEMENT FOR PYTHON 1.6.1\n---------------------------------------\n\n1. This LICENSE AGREEMENT is between the Corporation for National\nResearch Initiatives, having an office at 1895 Preston White Drive,\nReston, VA 20191 (\"CNRI\"), and the Individual or Organization\n(\"Licensee\") accessing and otherwise using Python 1.6.1 software in\nsource or binary form and its associated documentation.\n\n2. Subject to the terms and conditions of this License Agreement, CNRI\nhereby grants Licensee a nonexclusive, royalty-free, world-wide\nlicense to reproduce, analyze, test, perform and/or display publicly,\nprepare derivative works, distribute, and otherwise use Python 1.6.1\nalone or in any derivative version, provided, however, that CNRI's\nLicense Agreement and CNRI's notice of copyright, i.e., \"Copyright (c)\n1995-2001 Corporation for National Research Initiatives; All Rights\nReserved\" are retained in Python 1.6.1 alone or in any derivative\nversion prepared by Licensee.  Alternately, in lieu of CNRI's License\nAgreement, Licensee may substitute the following text (omitting the\nquotes): \"Python 1.6.1 is made available subject to the terms and\nconditions in CNRI's License Agreement.  This Agreement together with\nPython 1.6.1 may be located on the Internet using the following\nunique, persistent identifier (known as a handle): 1895.22/1013.  This\nAgreement may also be obtained from a proxy server on the Internet\nusing the following URL: http://hdl.handle.net/1895.22/1013\".\n\n3. In the event Licensee prepares a derivative work that is based on\nor incorporates Python 1.6.1 or any part thereof, and wants to make\nthe derivative work available to others as provided herein, then\nLicensee hereby agrees to include in any such work a brief summary of\nthe changes made to Python 1.6.1.\n\n4. CNRI is making Python 1.6.1 available to Licensee on an \"AS IS\"\nbasis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\n1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\nA RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,\nOR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n6. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n7. This License Agreement shall be governed by the federal\nintellectual property law of the United States, including without\nlimitation the federal copyright law, and, to the extent such\nU.S. federal law does not apply, by the law of the Commonwealth of\nVirginia, excluding Virginia's conflict of law provisions.\nNotwithstanding the foregoing, with regard to derivative works based\non Python 1.6.1 that incorporate non-separable material that was\npreviously distributed under the GNU General Public License (GPL), the\nlaw of the Commonwealth of Virginia shall govern this License\nAgreement only as to issues arising under or with respect to\nParagraphs 4, 5, and 7 of this License Agreement.  Nothing in this\nLicense Agreement shall be deemed to create any relationship of\nagency, partnership, or joint venture between CNRI and Licensee.  This\nLicense Agreement does not grant permission to use CNRI trademarks or\ntrade name in a trademark sense to endorse or promote products or\nservices of Licensee, or any third party.\n\n8. By clicking on the \"ACCEPT\" button where indicated, or by copying,\ninstalling or otherwise using Python 1.6.1, Licensee agrees to be\nbound by the terms and conditions of this License Agreement.\n\n        ACCEPT\n\n\nCWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2\n--------------------------------------------------\n\nCopyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,\nThe Netherlands.  All rights reserved.\n\nPermission to use, copy, modify, and distribute this software and its\ndocumentation for any purpose and without fee is hereby granted,\nprovided that the above copyright notice appear in all copies and that\nboth that copyright notice and this permission notice appear in\nsupporting documentation, and that the name of Stichting Mathematisch\nCentrum or CWI not be used in advertising or publicity pertaining to\ndistribution of the software without specific, written prior\npermission.\n\nSTICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO\nTHIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE\nFOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT\nOF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/METADATA",
    "content": "Metadata-Version: 2.1\nName: typing\nVersion: 3.10.0.0\nSummary: Type Hints for Python\nHome-page: https://docs.python.org/3/library/typing.html\nAuthor: Guido van Rossum, Jukka Lehtosalo, Łukasz Langa, Ivan Levkivskyi\nAuthor-email: jukka.lehtosalo@iki.fi\nLicense: PSF\nProject-URL: Source, https://github.com/python/typing\nKeywords: typing function annotations type hints hinting checking checker typehints typehinting typechecking backport\nPlatform: UNKNOWN\nClassifier: Development Status :: 5 - Production/Stable\nClassifier: Environment :: Console\nClassifier: Intended Audience :: Developers\nClassifier: License :: OSI Approved :: Python Software Foundation License\nClassifier: Operating System :: OS Independent\nClassifier: Programming Language :: Python :: 2.7\nClassifier: Programming Language :: Python :: 3.4\nClassifier: Topic :: Software Development\nRequires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <3.5\n\nTyping -- Type Hints for Python\n\nThis is a backport of the standard library typing module to Python\nversions older than 3.5.  (See note below for newer versions.)\n\nTyping defines a standard notation for Python function and variable\ntype annotations. The notation can be used for documenting code in a\nconcise, standard format, and it has been designed to also be used by\nstatic and runtime type checkers, static analyzers, IDEs and other\ntools.\n\nNOTE: in Python 3.5 and later, the typing module lives in the stdlib,\nand installing this package has NO EFFECT, because stdlib takes higher\nprecedence than the installation directory. To get a newer version of\nthe typing module in Python 3.5 or later, you have to upgrade to a\nnewer Python (bugfix) version.  For example, typing in Python 3.6.0 is\nmissing the definition of 'Type' -- upgrading to 3.6.2 will fix this.\n\nAlso note that most improvements to the typing module in Python 3.7\nwill not be included in this package, since Python 3.7 has some\nbuilt-in support that is not present in older versions (See PEP 560.)\n\nFor package maintainers, it is preferred to use\n``typing;python_version<\"3.5\"`` if your package requires it to support\nearlier Python versions. This will avoid shadowing the stdlib typing\nmodule when your package is installed via ``pip install -t .`` on\nPython 3.5 or later.\n\n\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/RECORD",
    "content": "typing-3.10.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4\ntyping-3.10.0.0.dist-info/LICENSE,sha256=_xfOlOECAk3raHc-scx0ynbaTmWPNzUx8Kwi1oprsa0,12755\ntyping-3.10.0.0.dist-info/METADATA,sha256=ZMrqFtMBF5truoFjyvYNNd44n84-wErUFcPTKMNrln8,2265\ntyping-3.10.0.0.dist-info/RECORD,,\ntyping-3.10.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0\ntyping-3.10.0.0.dist-info/WHEEL,sha256=bK8TJl-oUKFDa18qkB68zwTZhIBCifqi4qjS_NS4aFQ,92\ntyping-3.10.0.0.dist-info/top_level.txt,sha256=oG8QCMTRcfcgGpEVbdwBU2DM8MthjmZSDaaQ6WWHx4o,7\ntyping.py,sha256=yP2fxy8eprK-cHMe9bAcvU7QL7n_YGtoTFOG3bsWVJQ,84492\ntyping.pyc,,\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/REQUESTED",
    "content": ""
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/WHEEL",
    "content": "Wheel-Version: 1.0\nGenerator: bdist_wheel (0.36.2)\nRoot-Is-Purelib: true\nTag: py2-none-any\n\n"
  },
  {
    "path": "vendor/typing-3.10.0.0.dist-info/top_level.txt",
    "content": "typing\n"
  },
  {
    "path": "vendor/typing.py",
    "content": "from __future__ import absolute_import, unicode_literals\n\nimport abc\nfrom abc import abstractmethod, abstractproperty\nimport collections\nimport functools\nimport re as stdlib_re  # Avoid confusion with the re we export.\nimport sys\nimport types\nimport copy\ntry:\n    import collections.abc as collections_abc\nexcept ImportError:\n    import collections as collections_abc  # Fallback for PY3.2.\n\n\n# Please keep __all__ alphabetized within each category.\n__all__ = [\n    # Super-special typing primitives.\n    'Any',\n    'Callable',\n    'ClassVar',\n    'Final',\n    'Generic',\n    'Literal',\n    'Optional',\n    'Protocol',\n    'Tuple',\n    'Type',\n    'TypeVar',\n    'Union',\n\n    # ABCs (from collections.abc).\n    'AbstractSet',  # collections.abc.Set.\n    'GenericMeta',  # subclass of abc.ABCMeta and a metaclass\n                    # for 'Generic' and ABCs below.\n    'ByteString',\n    'Container',\n    'ContextManager',\n    'Hashable',\n    'ItemsView',\n    'Iterable',\n    'Iterator',\n    'KeysView',\n    'Mapping',\n    'MappingView',\n    'MutableMapping',\n    'MutableSequence',\n    'MutableSet',\n    'Sequence',\n    'Sized',\n    'ValuesView',\n\n    # Structural checks, a.k.a. protocols.\n    'Reversible',\n    'SupportsAbs',\n    'SupportsComplex',\n    'SupportsFloat',\n    'SupportsIndex',\n    'SupportsInt',\n\n    # Concrete collection types.\n    'Counter',\n    'Deque',\n    'Dict',\n    'DefaultDict',\n    'List',\n    'Set',\n    'FrozenSet',\n    'NamedTuple',  # Not really a type.\n    'TypedDict',  # Not really a type.\n    'Generator',\n\n    # One-off things.\n    'AnyStr',\n    'cast',\n    'final',\n    'get_type_hints',\n    'NewType',\n    'no_type_check',\n    'no_type_check_decorator',\n    'NoReturn',\n    'overload',\n    'runtime_checkable',\n    'Text',\n    'TYPE_CHECKING',\n]\n\n# The pseudo-submodules 're' and 'io' are part of the public\n# namespace, but excluded from __all__ because they might stomp on\n# legitimate imports of those modules.\n\n\ndef _qualname(x):\n    if sys.version_info[:2] >= (3, 3):\n        return x.__qualname__\n    else:\n        # Fall back to just name.\n        return x.__name__\n\n\ndef _trim_name(nm):\n    whitelist = ('_TypeAlias', '_ForwardRef', '_TypingBase', '_FinalTypingBase')\n    if nm.startswith('_') and nm not in whitelist:\n        nm = nm[1:]\n    return nm\n\n\nclass TypingMeta(type):\n    \"\"\"Metaclass for most types defined in typing module\n    (not a part of public API).\n\n    This also defines a dummy constructor (all the work for most typing\n    constructs is done in __new__) and a nicer repr().\n    \"\"\"\n\n    _is_protocol = False\n\n    def __new__(cls, name, bases, namespace):\n        return super(TypingMeta, cls).__new__(cls, str(name), bases, namespace)\n\n    @classmethod\n    def assert_no_subclassing(cls, bases):\n        for base in bases:\n            if isinstance(base, cls):\n                raise TypeError(\"Cannot subclass %s\" %\n                                (', '.join(map(_type_repr, bases)) or '()'))\n\n    def __init__(self, *args, **kwds):\n        pass\n\n    def _eval_type(self, globalns, localns):\n        \"\"\"Override this in subclasses to interpret forward references.\n\n        For example, List['C'] is internally stored as\n        List[_ForwardRef('C')], which should evaluate to List[C],\n        where C is an object found in globalns or localns (searching\n        localns first, of course).\n        \"\"\"\n        return self\n\n    def _get_type_vars(self, tvars):\n        pass\n\n    def __repr__(self):\n        qname = _trim_name(_qualname(self))\n        return '%s.%s' % (self.__module__, qname)\n\n\nclass _TypingBase(object):\n    \"\"\"Internal indicator of special typing constructs.\"\"\"\n    __metaclass__ = TypingMeta\n    __slots__ = ('__weakref__',)\n\n    def __init__(self, *args, **kwds):\n        pass\n\n    def __new__(cls, *args, **kwds):\n        \"\"\"Constructor.\n\n        This only exists to give a better error message in case\n        someone tries to subclass a special typing object (not a good idea).\n        \"\"\"\n        if (len(args) == 3 and\n                isinstance(args[0], str) and\n                isinstance(args[1], tuple)):\n            # Close enough.\n            raise TypeError(\"Cannot subclass %r\" % cls)\n        return super(_TypingBase, cls).__new__(cls)\n\n    # Things that are not classes also need these.\n    def _eval_type(self, globalns, localns):\n        return self\n\n    def _get_type_vars(self, tvars):\n        pass\n\n    def __repr__(self):\n        cls = type(self)\n        qname = _trim_name(_qualname(cls))\n        return '%s.%s' % (cls.__module__, qname)\n\n    def __call__(self, *args, **kwds):\n        raise TypeError(\"Cannot instantiate %r\" % type(self))\n\n\nclass _FinalTypingBase(_TypingBase):\n    \"\"\"Internal mix-in class to prevent instantiation.\n\n    Prevents instantiation unless _root=True is given in class call.\n    It is used to create pseudo-singleton instances Any, Union, Optional, etc.\n    \"\"\"\n\n    __slots__ = ()\n\n    def __new__(cls, *args, **kwds):\n        self = super(_FinalTypingBase, cls).__new__(cls, *args, **kwds)\n        if '_root' in kwds and kwds['_root'] is True:\n            return self\n        raise TypeError(\"Cannot instantiate %r\" % cls)\n\n    def __reduce__(self):\n        return _trim_name(type(self).__name__)\n\n\nclass _ForwardRef(_TypingBase):\n    \"\"\"Internal wrapper to hold a forward reference.\"\"\"\n\n    __slots__ = ('__forward_arg__', '__forward_code__',\n                 '__forward_evaluated__', '__forward_value__')\n\n    def __init__(self, arg):\n        super(_ForwardRef, self).__init__(arg)\n        if not isinstance(arg, basestring):\n            raise TypeError('Forward reference must be a string -- got %r' % (arg,))\n        try:\n            code = compile(arg, '<string>', 'eval')\n        except SyntaxError:\n            raise SyntaxError('Forward reference must be an expression -- got %r' %\n                              (arg,))\n        self.__forward_arg__ = arg\n        self.__forward_code__ = code\n        self.__forward_evaluated__ = False\n        self.__forward_value__ = None\n\n    def _eval_type(self, globalns, localns):\n        if not self.__forward_evaluated__ or localns is not globalns:\n            if globalns is None and localns is None:\n                globalns = localns = {}\n            elif globalns is None:\n                globalns = localns\n            elif localns is None:\n                localns = globalns\n            self.__forward_value__ = _type_check(\n                eval(self.__forward_code__, globalns, localns),\n                \"Forward references must evaluate to types.\")\n            self.__forward_evaluated__ = True\n        return self.__forward_value__\n\n    def __eq__(self, other):\n        if not isinstance(other, _ForwardRef):\n            return NotImplemented\n        return (self.__forward_arg__ == other.__forward_arg__ and\n                self.__forward_value__ == other.__forward_value__)\n\n    def __hash__(self):\n        return hash((self.__forward_arg__, self.__forward_value__))\n\n    def __instancecheck__(self, obj):\n        raise TypeError(\"Forward references cannot be used with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        raise TypeError(\"Forward references cannot be used with issubclass().\")\n\n    def __repr__(self):\n        return '_ForwardRef(%r)' % (self.__forward_arg__,)\n\n\nclass _TypeAlias(_TypingBase):\n    \"\"\"Internal helper class for defining generic variants of concrete types.\n\n    Note that this is not a type; let's call it a pseudo-type.  It cannot\n    be used in instance and subclass checks in parameterized form, i.e.\n    ``isinstance(42, Match[str])`` raises ``TypeError`` instead of returning\n    ``False``.\n    \"\"\"\n\n    __slots__ = ('name', 'type_var', 'impl_type', 'type_checker')\n\n    def __init__(self, name, type_var, impl_type, type_checker):\n        \"\"\"Initializer.\n\n        Args:\n            name: The name, e.g. 'Pattern'.\n            type_var: The type parameter, e.g. AnyStr, or the\n                specific type, e.g. str.\n            impl_type: The implementation type.\n            type_checker: Function that takes an impl_type instance.\n                and returns a value that should be a type_var instance.\n        \"\"\"\n        assert isinstance(name, basestring), repr(name)\n        assert isinstance(impl_type, type), repr(impl_type)\n        assert not isinstance(impl_type, TypingMeta), repr(impl_type)\n        assert isinstance(type_var, (type, _TypingBase)), repr(type_var)\n        self.name = name\n        self.type_var = type_var\n        self.impl_type = impl_type\n        self.type_checker = type_checker\n\n    def __repr__(self):\n        return \"%s[%s]\" % (self.name, _type_repr(self.type_var))\n\n    def __getitem__(self, parameter):\n        if not isinstance(self.type_var, TypeVar):\n            raise TypeError(\"%s cannot be further parameterized.\" % self)\n        if self.type_var.__constraints__ and isinstance(parameter, type):\n            if not issubclass(parameter, self.type_var.__constraints__):\n                raise TypeError(\"%s is not a valid substitution for %s.\" %\n                                (parameter, self.type_var))\n        if isinstance(parameter, TypeVar) and parameter is not self.type_var:\n            raise TypeError(\"%s cannot be re-parameterized.\" % self)\n        return self.__class__(self.name, parameter,\n                              self.impl_type, self.type_checker)\n\n    def __eq__(self, other):\n        if not isinstance(other, _TypeAlias):\n            return NotImplemented\n        return self.name == other.name and self.type_var == other.type_var\n\n    def __hash__(self):\n        return hash((self.name, self.type_var))\n\n    def __instancecheck__(self, obj):\n        if not isinstance(self.type_var, TypeVar):\n            raise TypeError(\"Parameterized type aliases cannot be used \"\n                            \"with isinstance().\")\n        return isinstance(obj, self.impl_type)\n\n    def __subclasscheck__(self, cls):\n        if not isinstance(self.type_var, TypeVar):\n            raise TypeError(\"Parameterized type aliases cannot be used \"\n                            \"with issubclass().\")\n        return issubclass(cls, self.impl_type)\n\n\ndef _get_type_vars(types, tvars):\n    for t in types:\n        if isinstance(t, TypingMeta) or isinstance(t, _TypingBase):\n            t._get_type_vars(tvars)\n\n\ndef _type_vars(types):\n    tvars = []\n    _get_type_vars(types, tvars)\n    return tuple(tvars)\n\n\ndef _eval_type(t, globalns, localns):\n    if isinstance(t, TypingMeta) or isinstance(t, _TypingBase):\n        return t._eval_type(globalns, localns)\n    return t\n\n\ndef _type_check(arg, msg):\n    \"\"\"Check that the argument is a type, and return it (internal helper).\n\n    As a special case, accept None and return type(None) instead.\n    Also, _TypeAlias instances (e.g. Match, Pattern) are acceptable.\n\n    The msg argument is a human-readable error message, e.g.\n\n        \"Union[arg, ...]: arg should be a type.\"\n\n    We append the repr() of the actual value (truncated to 100 chars).\n    \"\"\"\n    if arg is None:\n        return type(None)\n    if isinstance(arg, basestring):\n        arg = _ForwardRef(arg)\n    if (\n        isinstance(arg, _TypingBase) and type(arg).__name__ == '_ClassVar' or\n        not isinstance(arg, (type, _TypingBase)) and not callable(arg)\n    ):\n        raise TypeError(msg + \" Got %.100r.\" % (arg,))\n    # Bare Union etc. are not valid as type arguments\n    if (\n        type(arg).__name__ in ('_Union', '_Optional') and\n        not getattr(arg, '__origin__', None) or\n        isinstance(arg, TypingMeta) and arg._gorg in (Generic, Protocol)\n    ):\n        raise TypeError(\"Plain %s is not valid as type argument\" % arg)\n    return arg\n\n\ndef _type_repr(obj):\n    \"\"\"Return the repr() of an object, special-casing types (internal helper).\n\n    If obj is a type, we return a shorter version than the default\n    type.__repr__, based on the module and qualified name, which is\n    typically enough to uniquely identify a type.  For everything\n    else, we fall back on repr(obj).\n    \"\"\"\n    if isinstance(obj, type) and not isinstance(obj, TypingMeta):\n        if obj.__module__ == '__builtin__':\n            return _qualname(obj)\n        return '%s.%s' % (obj.__module__, _qualname(obj))\n    if obj is Ellipsis:\n        return '...'\n    if isinstance(obj, types.FunctionType):\n        return obj.__name__\n    return repr(obj)\n\n\nclass ClassVarMeta(TypingMeta):\n    \"\"\"Metaclass for _ClassVar\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        self = super(ClassVarMeta, cls).__new__(cls, name, bases, namespace)\n        return self\n\n\nclass _ClassVar(_FinalTypingBase):\n    \"\"\"Special type construct to mark class variables.\n\n    An annotation wrapped in ClassVar indicates that a given\n    attribute is intended to be used as a class variable and\n    should not be set on instances of that class. Usage::\n\n      class Starship:\n          stats = {}  # type: ClassVar[Dict[str, int]] # class variable\n          damage = 10 # type: int                      # instance variable\n\n    ClassVar accepts only types and cannot be further subscribed.\n\n    Note that ClassVar is not a class itself, and should not\n    be used with isinstance() or issubclass().\n    \"\"\"\n\n    __metaclass__ = ClassVarMeta\n    __slots__ = ('__type__',)\n\n    def __init__(self, tp=None, _root=False):\n        self.__type__ = tp\n\n    def __getitem__(self, item):\n        cls = type(self)\n        if self.__type__ is None:\n            return cls(_type_check(item,\n                       '{} accepts only types.'.format(cls.__name__[1:])),\n                       _root=True)\n        raise TypeError('{} cannot be further subscripted'\n                        .format(cls.__name__[1:]))\n\n    def _eval_type(self, globalns, localns):\n        return type(self)(_eval_type(self.__type__, globalns, localns),\n                          _root=True)\n\n    def __repr__(self):\n        r = super(_ClassVar, self).__repr__()\n        if self.__type__ is not None:\n            r += '[{}]'.format(_type_repr(self.__type__))\n        return r\n\n    def __hash__(self):\n        return hash((type(self).__name__, self.__type__))\n\n    def __eq__(self, other):\n        if not isinstance(other, _ClassVar):\n            return NotImplemented\n        if self.__type__ is not None:\n            return self.__type__ == other.__type__\n        return self is other\n\n\nClassVar = _ClassVar(_root=True)\n\n\nclass _FinalMeta(TypingMeta):\n    \"\"\"Metaclass for _Final\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        self = super(_FinalMeta, cls).__new__(cls, name, bases, namespace)\n        return self\n\n\nclass _Final(_FinalTypingBase):\n    \"\"\"A special typing construct to indicate that a name\n    cannot be re-assigned or overridden in a subclass.\n    For example:\n\n        MAX_SIZE: Final = 9000\n        MAX_SIZE += 1  # Error reported by type checker\n\n        class Connection:\n            TIMEOUT: Final[int] = 10\n        class FastConnector(Connection):\n            TIMEOUT = 1  # Error reported by type checker\n\n    There is no runtime checking of these properties.\n    \"\"\"\n\n    __metaclass__ = _FinalMeta\n    __slots__ = ('__type__',)\n\n    def __init__(self, tp=None, **kwds):\n        self.__type__ = tp\n\n    def __getitem__(self, item):\n        cls = type(self)\n        if self.__type__ is None:\n            return cls(_type_check(item,\n                       '{} accepts only single type.'.format(cls.__name__[1:])),\n                       _root=True)\n        raise TypeError('{} cannot be further subscripted'\n                        .format(cls.__name__[1:]))\n\n    def _eval_type(self, globalns, localns):\n        new_tp = _eval_type(self.__type__, globalns, localns)\n        if new_tp == self.__type__:\n            return self\n        return type(self)(new_tp, _root=True)\n\n    def __repr__(self):\n        r = super(_Final, self).__repr__()\n        if self.__type__ is not None:\n            r += '[{}]'.format(_type_repr(self.__type__))\n        return r\n\n    def __hash__(self):\n        return hash((type(self).__name__, self.__type__))\n\n    def __eq__(self, other):\n        if not isinstance(other, _Final):\n            return NotImplemented\n        if self.__type__ is not None:\n            return self.__type__ == other.__type__\n        return self is other\n\n\nFinal = _Final(_root=True)\n\n\ndef final(f):\n    \"\"\"This decorator can be used to indicate to type checkers that\n    the decorated method cannot be overridden, and decorated class\n    cannot be subclassed. For example:\n\n        class Base:\n            @final\n            def done(self) -> None:\n                ...\n        class Sub(Base):\n            def done(self) -> None:  # Error reported by type checker\n                ...\n        @final\n        class Leaf:\n            ...\n        class Other(Leaf):  # Error reported by type checker\n            ...\n\n    There is no runtime checking of these properties.\n    \"\"\"\n    return f\n\n\nclass _LiteralMeta(TypingMeta):\n    \"\"\"Metaclass for _Literal\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        self = super(_LiteralMeta, cls).__new__(cls, name, bases, namespace)\n        return self\n\n\nclass _Literal(_FinalTypingBase):\n    \"\"\"A type that can be used to indicate to type checkers that the\n    corresponding value has a value literally equivalent to the\n    provided parameter. For example:\n\n        var: Literal[4] = 4\n\n    The type checker understands that 'var' is literally equal to the\n    value 4 and no other value.\n\n    Literal[...] cannot be subclassed. There is no runtime checking\n    verifying that the parameter is actually a value instead of a type.\n    \"\"\"\n\n    __metaclass__ = _LiteralMeta\n    __slots__ = ('__values__',)\n\n    def __init__(self, values=None, **kwds):\n        self.__values__ = values\n\n    def __getitem__(self, item):\n        cls = type(self)\n        if self.__values__ is None:\n            if not isinstance(item, tuple):\n                item = (item,)\n            return cls(values=item,\n                       _root=True)\n        raise TypeError('{} cannot be further subscripted'\n                        .format(cls.__name__[1:]))\n\n    def _eval_type(self, globalns, localns):\n        return self\n\n    def __repr__(self):\n        r = super(_Literal, self).__repr__()\n        if self.__values__ is not None:\n            r += '[{}]'.format(', '.join(map(_type_repr, self.__values__)))\n        return r\n\n    def __hash__(self):\n        return hash((type(self).__name__, self.__values__))\n\n    def __eq__(self, other):\n        if not isinstance(other, _Literal):\n            return NotImplemented\n        if self.__values__ is not None:\n            return self.__values__ == other.__values__\n        return self is other\n\n\nLiteral = _Literal(_root=True)\n\n\nclass AnyMeta(TypingMeta):\n    \"\"\"Metaclass for Any.\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        self = super(AnyMeta, cls).__new__(cls, name, bases, namespace)\n        return self\n\n\nclass _Any(_FinalTypingBase):\n    \"\"\"Special type indicating an unconstrained type.\n\n    - Any is compatible with every type.\n    - Any assumed to have all methods.\n    - All values assumed to be instances of Any.\n\n    Note that all the above statements are true from the point of view of\n    static type checkers. At runtime, Any should not be used with instance\n    or class checks.\n    \"\"\"\n    __metaclass__ = AnyMeta\n    __slots__ = ()\n\n    def __instancecheck__(self, obj):\n        raise TypeError(\"Any cannot be used with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        raise TypeError(\"Any cannot be used with issubclass().\")\n\n\nAny = _Any(_root=True)\n\n\nclass NoReturnMeta(TypingMeta):\n    \"\"\"Metaclass for NoReturn.\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        self = super(NoReturnMeta, cls).__new__(cls, name, bases, namespace)\n        return self\n\n\nclass _NoReturn(_FinalTypingBase):\n    \"\"\"Special type indicating functions that never return.\n    Example::\n\n      from typing import NoReturn\n\n      def stop() -> NoReturn:\n          raise Exception('no way')\n\n    This type is invalid in other positions, e.g., ``List[NoReturn]``\n    will fail in static type checkers.\n    \"\"\"\n    __metaclass__ = NoReturnMeta\n    __slots__ = ()\n\n    def __instancecheck__(self, obj):\n        raise TypeError(\"NoReturn cannot be used with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        raise TypeError(\"NoReturn cannot be used with issubclass().\")\n\n\nNoReturn = _NoReturn(_root=True)\n\n\nclass TypeVarMeta(TypingMeta):\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        return super(TypeVarMeta, cls).__new__(cls, name, bases, namespace)\n\n\nclass TypeVar(_TypingBase):\n    \"\"\"Type variable.\n\n    Usage::\n\n      T = TypeVar('T')  # Can be anything\n      A = TypeVar('A', str, bytes)  # Must be str or bytes\n\n    Type variables exist primarily for the benefit of static type\n    checkers.  They serve as the parameters for generic types as well\n    as for generic function definitions.  See class Generic for more\n    information on generic types.  Generic functions work as follows:\n\n      def repeat(x: T, n: int) -> List[T]:\n          '''Return a list containing n references to x.'''\n          return [x]*n\n\n      def longest(x: A, y: A) -> A:\n          '''Return the longest of two strings.'''\n          return x if len(x) >= len(y) else y\n\n    The latter example's signature is essentially the overloading\n    of (str, str) -> str and (bytes, bytes) -> bytes.  Also note\n    that if the arguments are instances of some subclass of str,\n    the return type is still plain str.\n\n    At runtime, isinstance(x, T) and issubclass(C, T) will raise TypeError.\n\n    Type variables defined with covariant=True or contravariant=True\n    can be used do declare covariant or contravariant generic types.\n    See PEP 484 for more details. By default generic types are invariant\n    in all type variables.\n\n    Type variables can be introspected. e.g.:\n\n      T.__name__ == 'T'\n      T.__constraints__ == ()\n      T.__covariant__ == False\n      T.__contravariant__ = False\n      A.__constraints__ == (str, bytes)\n    \"\"\"\n\n    __metaclass__ = TypeVarMeta\n    __slots__ = ('__name__', '__bound__', '__constraints__',\n                 '__covariant__', '__contravariant__')\n\n    def __init__(self, name, *constraints, **kwargs):\n        super(TypeVar, self).__init__(name, *constraints, **kwargs)\n        bound = kwargs.get('bound', None)\n        covariant = kwargs.get('covariant', False)\n        contravariant = kwargs.get('contravariant', False)\n        self.__name__ = name\n        if covariant and contravariant:\n            raise ValueError(\"Bivariant types are not supported.\")\n        self.__covariant__ = bool(covariant)\n        self.__contravariant__ = bool(contravariant)\n        if constraints and bound is not None:\n            raise TypeError(\"Constraints cannot be combined with bound=...\")\n        if constraints and len(constraints) == 1:\n            raise TypeError(\"A single constraint is not allowed\")\n        msg = \"TypeVar(name, constraint, ...): constraints must be types.\"\n        self.__constraints__ = tuple(_type_check(t, msg) for t in constraints)\n        if bound:\n            self.__bound__ = _type_check(bound, \"Bound must be a type.\")\n        else:\n            self.__bound__ = None\n\n    def _get_type_vars(self, tvars):\n        if self not in tvars:\n            tvars.append(self)\n\n    def __repr__(self):\n        if self.__covariant__:\n            prefix = '+'\n        elif self.__contravariant__:\n            prefix = '-'\n        else:\n            prefix = '~'\n        return prefix + self.__name__\n\n    def __instancecheck__(self, instance):\n        raise TypeError(\"Type variables cannot be used with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        raise TypeError(\"Type variables cannot be used with issubclass().\")\n\n\n# Some unconstrained type variables.  These are used by the container types.\n# (These are not for export.)\nT = TypeVar('T')  # Any type.\nKT = TypeVar('KT')  # Key type.\nVT = TypeVar('VT')  # Value type.\nT_co = TypeVar('T_co', covariant=True)  # Any type covariant containers.\nV_co = TypeVar('V_co', covariant=True)  # Any type covariant containers.\nVT_co = TypeVar('VT_co', covariant=True)  # Value type covariant containers.\nT_contra = TypeVar('T_contra', contravariant=True)  # Ditto contravariant.\n\n# A useful type variable with constraints.  This represents string types.\n# (This one *is* for export!)\nAnyStr = TypeVar('AnyStr', bytes, unicode)\n\n\ndef _replace_arg(arg, tvars, args):\n    \"\"\"An internal helper function: replace arg if it is a type variable\n    found in tvars with corresponding substitution from args or\n    with corresponding substitution sub-tree if arg is a generic type.\n    \"\"\"\n\n    if tvars is None:\n        tvars = []\n    if hasattr(arg, '_subs_tree') and isinstance(arg, (GenericMeta, _TypingBase)):\n        return arg._subs_tree(tvars, args)\n    if isinstance(arg, TypeVar):\n        for i, tvar in enumerate(tvars):\n            if arg == tvar:\n                return args[i]\n    return arg\n\n\n# Special typing constructs Union, Optional, Generic, Callable and Tuple\n# use three special attributes for internal bookkeeping of generic types:\n# * __parameters__ is a tuple of unique free type parameters of a generic\n#   type, for example, Dict[T, T].__parameters__ == (T,);\n# * __origin__ keeps a reference to a type that was subscripted,\n#   e.g., Union[T, int].__origin__ == Union;\n# * __args__ is a tuple of all arguments used in subscripting,\n#   e.g., Dict[T, int].__args__ == (T, int).\n\n\ndef _subs_tree(cls, tvars=None, args=None):\n    \"\"\"An internal helper function: calculate substitution tree\n    for generic cls after replacing its type parameters with\n    substitutions in tvars -> args (if any).\n    Repeat the same following __origin__'s.\n\n    Return a list of arguments with all possible substitutions\n    performed. Arguments that are generic classes themselves are represented\n    as tuples (so that no new classes are created by this function).\n    For example: _subs_tree(List[Tuple[int, T]][str]) == [(Tuple, int, str)]\n    \"\"\"\n\n    if cls.__origin__ is None:\n        return cls\n    # Make of chain of origins (i.e. cls -> cls.__origin__)\n    current = cls.__origin__\n    orig_chain = []\n    while current.__origin__ is not None:\n        orig_chain.append(current)\n        current = current.__origin__\n    # Replace type variables in __args__ if asked ...\n    tree_args = []\n    for arg in cls.__args__:\n        tree_args.append(_replace_arg(arg, tvars, args))\n    # ... then continue replacing down the origin chain.\n    for ocls in orig_chain:\n        new_tree_args = []\n        for arg in ocls.__args__:\n            new_tree_args.append(_replace_arg(arg, ocls.__parameters__, tree_args))\n        tree_args = new_tree_args\n    return tree_args\n\n\ndef _remove_dups_flatten(parameters):\n    \"\"\"An internal helper for Union creation and substitution: flatten Union's\n    among parameters, then remove duplicates and strict subclasses.\n    \"\"\"\n\n    # Flatten out Union[Union[...], ...].\n    params = []\n    for p in parameters:\n        if isinstance(p, _Union) and p.__origin__ is Union:\n            params.extend(p.__args__)\n        elif isinstance(p, tuple) and len(p) > 0 and p[0] is Union:\n            params.extend(p[1:])\n        else:\n            params.append(p)\n    # Weed out strict duplicates, preserving the first of each occurrence.\n    all_params = set(params)\n    if len(all_params) < len(params):\n        new_params = []\n        for t in params:\n            if t in all_params:\n                new_params.append(t)\n                all_params.remove(t)\n        params = new_params\n        assert not all_params, all_params\n    # Weed out subclasses.\n    # E.g. Union[int, Employee, Manager] == Union[int, Employee].\n    # If object is present it will be sole survivor among proper classes.\n    # Never discard type variables.\n    # (In particular, Union[str, AnyStr] != AnyStr.)\n    all_params = set(params)\n    for t1 in params:\n        if not isinstance(t1, type):\n            continue\n        if any(isinstance(t2, type) and issubclass(t1, t2)\n               for t2 in all_params - {t1}\n               if not (isinstance(t2, GenericMeta) and\n                       t2.__origin__ is not None)):\n            all_params.remove(t1)\n    return tuple(t for t in params if t in all_params)\n\n\ndef _check_generic(cls, parameters):\n    # Check correct count for parameters of a generic cls (internal helper).\n    if not cls.__parameters__:\n        raise TypeError(\"%s is not a generic class\" % repr(cls))\n    alen = len(parameters)\n    elen = len(cls.__parameters__)\n    if alen != elen:\n        raise TypeError(\"Too %s parameters for %s; actual %s, expected %s\" %\n                        (\"many\" if alen > elen else \"few\", repr(cls), alen, elen))\n\n\n_cleanups = []\n\n\ndef _tp_cache(func):\n    maxsize = 128\n    cache = {}\n    _cleanups.append(cache.clear)\n\n    @functools.wraps(func)\n    def inner(*args):\n        key = args\n        try:\n            return cache[key]\n        except TypeError:\n            # Assume it's an unhashable argument.\n            return func(*args)\n        except KeyError:\n            value = func(*args)\n            if len(cache) >= maxsize:\n                # If the cache grows too much, just start over.\n                cache.clear()\n            cache[key] = value\n            return value\n\n    return inner\n\n\nclass UnionMeta(TypingMeta):\n    \"\"\"Metaclass for Union.\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        return super(UnionMeta, cls).__new__(cls, name, bases, namespace)\n\n\nclass _Union(_FinalTypingBase):\n    \"\"\"Union type; Union[X, Y] means either X or Y.\n\n    To define a union, use e.g. Union[int, str].  Details:\n\n    - The arguments must be types and there must be at least one.\n\n    - None as an argument is a special case and is replaced by\n      type(None).\n\n    - Unions of unions are flattened, e.g.::\n\n        Union[Union[int, str], float] == Union[int, str, float]\n\n    - Unions of a single argument vanish, e.g.::\n\n        Union[int] == int  # The constructor actually returns int\n\n    - Redundant arguments are skipped, e.g.::\n\n        Union[int, str, int] == Union[int, str]\n\n    - When comparing unions, the argument order is ignored, e.g.::\n\n        Union[int, str] == Union[str, int]\n\n    - When two arguments have a subclass relationship, the least\n      derived argument is kept, e.g.::\n\n        class Employee: pass\n        class Manager(Employee): pass\n        Union[int, Employee, Manager] == Union[int, Employee]\n        Union[Manager, int, Employee] == Union[int, Employee]\n        Union[Employee, Manager] == Employee\n\n    - Similar for object::\n\n        Union[int, object] == object\n\n    - You cannot subclass or instantiate a union.\n\n    - You can use Optional[X] as a shorthand for Union[X, None].\n    \"\"\"\n\n    __metaclass__ = UnionMeta\n    __slots__ = ('__parameters__', '__args__', '__origin__', '__tree_hash__')\n\n    def __new__(cls, parameters=None, origin=None, *args, **kwds):\n        self = super(_Union, cls).__new__(cls, parameters, origin, *args, **kwds)\n        if origin is None:\n            self.__parameters__ = None\n            self.__args__ = None\n            self.__origin__ = None\n            self.__tree_hash__ = hash(frozenset(('Union',)))\n            return self\n        if not isinstance(parameters, tuple):\n            raise TypeError(\"Expected parameters=<tuple>\")\n        if origin is Union:\n            parameters = _remove_dups_flatten(parameters)\n            # It's not a union if there's only one type left.\n            if len(parameters) == 1:\n                return parameters[0]\n        self.__parameters__ = _type_vars(parameters)\n        self.__args__ = parameters\n        self.__origin__ = origin\n        # Pre-calculate the __hash__ on instantiation.\n        # This improves speed for complex substitutions.\n        subs_tree = self._subs_tree()\n        if isinstance(subs_tree, tuple):\n            self.__tree_hash__ = hash(frozenset(subs_tree))\n        else:\n            self.__tree_hash__ = hash(subs_tree)\n        return self\n\n    def _eval_type(self, globalns, localns):\n        if self.__args__ is None:\n            return self\n        ev_args = tuple(_eval_type(t, globalns, localns) for t in self.__args__)\n        ev_origin = _eval_type(self.__origin__, globalns, localns)\n        if ev_args == self.__args__ and ev_origin == self.__origin__:\n            # Everything is already evaluated.\n            return self\n        return self.__class__(ev_args, ev_origin, _root=True)\n\n    def _get_type_vars(self, tvars):\n        if self.__origin__ and self.__parameters__:\n            _get_type_vars(self.__parameters__, tvars)\n\n    def __repr__(self):\n        if self.__origin__ is None:\n            return super(_Union, self).__repr__()\n        tree = self._subs_tree()\n        if not isinstance(tree, tuple):\n            return repr(tree)\n        return tree[0]._tree_repr(tree)\n\n    def _tree_repr(self, tree):\n        arg_list = []\n        for arg in tree[1:]:\n            if not isinstance(arg, tuple):\n                arg_list.append(_type_repr(arg))\n            else:\n                arg_list.append(arg[0]._tree_repr(arg))\n        return super(_Union, self).__repr__() + '[%s]' % ', '.join(arg_list)\n\n    @_tp_cache\n    def __getitem__(self, parameters):\n        if parameters == ():\n            raise TypeError(\"Cannot take a Union of no types.\")\n        if not isinstance(parameters, tuple):\n            parameters = (parameters,)\n        if self.__origin__ is None:\n            msg = \"Union[arg, ...]: each arg must be a type.\"\n        else:\n            msg = \"Parameters to generic types must be types.\"\n        parameters = tuple(_type_check(p, msg) for p in parameters)\n        if self is not Union:\n            _check_generic(self, parameters)\n        return self.__class__(parameters, origin=self, _root=True)\n\n    def _subs_tree(self, tvars=None, args=None):\n        if self is Union:\n            return Union  # Nothing to substitute\n        tree_args = _subs_tree(self, tvars, args)\n        tree_args = _remove_dups_flatten(tree_args)\n        if len(tree_args) == 1:\n            return tree_args[0]  # Union of a single type is that type\n        return (Union,) + tree_args\n\n    def __eq__(self, other):\n        if isinstance(other, _Union):\n            return self.__tree_hash__ == other.__tree_hash__\n        elif self is not Union:\n            return self._subs_tree() == other\n        else:\n            return self is other\n\n    def __hash__(self):\n        return self.__tree_hash__\n\n    def __instancecheck__(self, obj):\n        raise TypeError(\"Unions cannot be used with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        raise TypeError(\"Unions cannot be used with issubclass().\")\n\n\nUnion = _Union(_root=True)\n\n\nclass OptionalMeta(TypingMeta):\n    \"\"\"Metaclass for Optional.\"\"\"\n\n    def __new__(cls, name, bases, namespace):\n        cls.assert_no_subclassing(bases)\n        return super(OptionalMeta, cls).__new__(cls, name, bases, namespace)\n\n\nclass _Optional(_FinalTypingBase):\n    \"\"\"Optional type.\n\n    Optional[X] is equivalent to Union[X, None].\n    \"\"\"\n\n    __metaclass__ = OptionalMeta\n    __slots__ = ()\n\n    @_tp_cache\n    def __getitem__(self, arg):\n        arg = _type_check(arg, \"Optional[t] requires a single type.\")\n        return Union[arg, type(None)]\n\n\nOptional = _Optional(_root=True)\n\n\ndef _next_in_mro(cls):\n    \"\"\"Helper for Generic.__new__.\n\n    Returns the class after the last occurrence of Generic or\n    Generic[...] in cls.__mro__.\n    \"\"\"\n    next_in_mro = object\n    # Look for the last occurrence of Generic or Generic[...].\n    for i, c in enumerate(cls.__mro__[:-1]):\n        if isinstance(c, GenericMeta) and c._gorg is Generic:\n            next_in_mro = cls.__mro__[i + 1]\n    return next_in_mro\n\n\ndef _make_subclasshook(cls):\n    \"\"\"Construct a __subclasshook__ callable that incorporates\n    the associated __extra__ class in subclass checks performed\n    against cls.\n    \"\"\"\n    if isinstance(cls.__extra__, abc.ABCMeta):\n        # The logic mirrors that of ABCMeta.__subclasscheck__.\n        # Registered classes need not be checked here because\n        # cls and its extra share the same _abc_registry.\n        def __extrahook__(cls, subclass):\n            res = cls.__extra__.__subclasshook__(subclass)\n            if res is not NotImplemented:\n                return res\n            if cls.__extra__ in getattr(subclass, '__mro__', ()):\n                return True\n            for scls in cls.__extra__.__subclasses__():\n                if isinstance(scls, GenericMeta):\n                    continue\n                if issubclass(subclass, scls):\n                    return True\n            return NotImplemented\n    else:\n        # For non-ABC extras we'll just call issubclass().\n        def __extrahook__(cls, subclass):\n            if cls.__extra__ and issubclass(subclass, cls.__extra__):\n                return True\n            return NotImplemented\n    return classmethod(__extrahook__)\n\n\nclass GenericMeta(TypingMeta, abc.ABCMeta):\n    \"\"\"Metaclass for generic types.\n\n    This is a metaclass for typing.Generic and generic ABCs defined in\n    typing module. User defined subclasses of GenericMeta can override\n    __new__ and invoke super().__new__. Note that GenericMeta.__new__\n    has strict rules on what is allowed in its bases argument:\n    * plain Generic is disallowed in bases;\n    * Generic[...] should appear in bases at most once;\n    * if Generic[...] is present, then it should list all type variables\n      that appear in other bases.\n    In addition, type of all generic bases is erased, e.g., C[int] is\n    stripped to plain C.\n    \"\"\"\n\n    def __new__(cls, name, bases, namespace,\n                tvars=None, args=None, origin=None, extra=None, orig_bases=None):\n        \"\"\"Create a new generic class. GenericMeta.__new__ accepts\n        keyword arguments that are used for internal bookkeeping, therefore\n        an override should pass unused keyword arguments to super().\n        \"\"\"\n        if tvars is not None:\n            # Called from __getitem__() below.\n            assert origin is not None\n            assert all(isinstance(t, TypeVar) for t in tvars), tvars\n        else:\n            # Called from class statement.\n            assert tvars is None, tvars\n            assert args is None, args\n            assert origin is None, origin\n\n            # Get the full set of tvars from the bases.\n            tvars = _type_vars(bases)\n            # Look for Generic[T1, ..., Tn].\n            # If found, tvars must be a subset of it.\n            # If not found, tvars is it.\n            # Also check for and reject plain Generic,\n            # and reject multiple Generic[...].\n            gvars = None\n            for base in bases:\n                if base is Generic:\n                    raise TypeError(\"Cannot inherit from plain Generic\")\n                if (isinstance(base, GenericMeta) and\n                        base.__origin__ in (Generic, Protocol)):\n                    if gvars is not None:\n                        raise TypeError(\n                            \"Cannot inherit from Generic[...] or\"\n                            \" Protocol[...] multiple times.\")\n                    gvars = base.__parameters__\n            if gvars is None:\n                gvars = tvars\n            else:\n                tvarset = set(tvars)\n                gvarset = set(gvars)\n                if not tvarset <= gvarset:\n                    raise TypeError(\n                        \"Some type variables (%s) \"\n                        \"are not listed in %s[%s]\" %\n                        (\", \".join(str(t) for t in tvars if t not in gvarset),\n                         \"Generic\" if any(b.__origin__ is Generic\n                                          for b in bases) else \"Protocol\",\n                         \", \".join(str(g) for g in gvars)))\n                tvars = gvars\n\n        initial_bases = bases\n        if extra is None:\n            extra = namespace.get('__extra__')\n        if extra is not None and type(extra) is abc.ABCMeta and extra not in bases:\n            bases = (extra,) + bases\n        bases = tuple(b._gorg if isinstance(b, GenericMeta) else b for b in bases)\n\n        # remove bare Generic from bases if there are other generic bases\n        if any(isinstance(b, GenericMeta) and b is not Generic for b in bases):\n            bases = tuple(b for b in bases if b is not Generic)\n        namespace.update({'__origin__': origin, '__extra__': extra})\n        self = super(GenericMeta, cls).__new__(cls, name, bases, namespace)\n        super(GenericMeta, self).__setattr__('_gorg',\n                                             self if not origin else origin._gorg)\n\n        self.__parameters__ = tvars\n        # Be prepared that GenericMeta will be subclassed by TupleMeta\n        # and CallableMeta, those two allow ..., (), or [] in __args___.\n        self.__args__ = tuple(Ellipsis if a is _TypingEllipsis else\n                              () if a is _TypingEmpty else\n                              a for a in args) if args else None\n        # Speed hack (https://github.com/python/typing/issues/196).\n        self.__next_in_mro__ = _next_in_mro(self)\n        # Preserve base classes on subclassing (__bases__ are type erased now).\n        if orig_bases is None:\n            self.__orig_bases__ = initial_bases\n\n        # This allows unparameterized generic collections to be used\n        # with issubclass() and isinstance() in the same way as their\n        # collections.abc counterparts (e.g., isinstance([], Iterable)).\n        if (\n            '__subclasshook__' not in namespace and extra or\n            # allow overriding\n            getattr(self.__subclasshook__, '__name__', '') == '__extrahook__'\n        ):\n            self.__subclasshook__ = _make_subclasshook(self)\n\n        if origin and hasattr(origin, '__qualname__'):  # Fix for Python 3.2.\n            self.__qualname__ = origin.__qualname__\n        self.__tree_hash__ = (hash(self._subs_tree()) if origin else\n                              super(GenericMeta, self).__hash__())\n        return self\n\n    def __init__(self, *args, **kwargs):\n        super(GenericMeta, self).__init__(*args, **kwargs)\n        if isinstance(self.__extra__, abc.ABCMeta):\n            self._abc_registry = self.__extra__._abc_registry\n            self._abc_cache = self.__extra__._abc_cache\n        elif self.__origin__ is not None:\n            self._abc_registry = self.__origin__._abc_registry\n            self._abc_cache = self.__origin__._abc_cache\n\n    # _abc_negative_cache and _abc_negative_cache_version\n    # realised as descriptors, since GenClass[t1, t2, ...] always\n    # share subclass info with GenClass.\n    # This is an important memory optimization.\n    @property\n    def _abc_negative_cache(self):\n        if isinstance(self.__extra__, abc.ABCMeta):\n            return self.__extra__._abc_negative_cache\n        return self._gorg._abc_generic_negative_cache\n\n    @_abc_negative_cache.setter\n    def _abc_negative_cache(self, value):\n        if self.__origin__ is None:\n            if isinstance(self.__extra__, abc.ABCMeta):\n                self.__extra__._abc_negative_cache = value\n            else:\n                self._abc_generic_negative_cache = value\n\n    @property\n    def _abc_negative_cache_version(self):\n        if isinstance(self.__extra__, abc.ABCMeta):\n            return self.__extra__._abc_negative_cache_version\n        return self._gorg._abc_generic_negative_cache_version\n\n    @_abc_negative_cache_version.setter\n    def _abc_negative_cache_version(self, value):\n        if self.__origin__ is None:\n            if isinstance(self.__extra__, abc.ABCMeta):\n                self.__extra__._abc_negative_cache_version = value\n            else:\n                self._abc_generic_negative_cache_version = value\n\n    def _get_type_vars(self, tvars):\n        if self.__origin__ and self.__parameters__:\n            _get_type_vars(self.__parameters__, tvars)\n\n    def _eval_type(self, globalns, localns):\n        ev_origin = (self.__origin__._eval_type(globalns, localns)\n                     if self.__origin__ else None)\n        ev_args = tuple(_eval_type(a, globalns, localns) for a\n                        in self.__args__) if self.__args__ else None\n        if ev_origin == self.__origin__ and ev_args == self.__args__:\n            return self\n        return self.__class__(self.__name__,\n                              self.__bases__,\n                              dict(self.__dict__),\n                              tvars=_type_vars(ev_args) if ev_args else None,\n                              args=ev_args,\n                              origin=ev_origin,\n                              extra=self.__extra__,\n                              orig_bases=self.__orig_bases__)\n\n    def __repr__(self):\n        if self.__origin__ is None:\n            return super(GenericMeta, self).__repr__()\n        return self._tree_repr(self._subs_tree())\n\n    def _tree_repr(self, tree):\n        arg_list = []\n        for arg in tree[1:]:\n            if arg == ():\n                arg_list.append('()')\n            elif not isinstance(arg, tuple):\n                arg_list.append(_type_repr(arg))\n            else:\n                arg_list.append(arg[0]._tree_repr(arg))\n        return super(GenericMeta, self).__repr__() + '[%s]' % ', '.join(arg_list)\n\n    def _subs_tree(self, tvars=None, args=None):\n        if self.__origin__ is None:\n            return self\n        tree_args = _subs_tree(self, tvars, args)\n        return (self._gorg,) + tuple(tree_args)\n\n    def __eq__(self, other):\n        if not isinstance(other, GenericMeta):\n            return NotImplemented\n        if self.__origin__ is None or other.__origin__ is None:\n            return self is other\n        return self.__tree_hash__ == other.__tree_hash__\n\n    def __hash__(self):\n        return self.__tree_hash__\n\n    @_tp_cache\n    def __getitem__(self, params):\n        if not isinstance(params, tuple):\n            params = (params,)\n        if not params and self._gorg is not Tuple:\n            raise TypeError(\n                \"Parameter list to %s[...] cannot be empty\" % _qualname(self))\n        msg = \"Parameters to generic types must be types.\"\n        params = tuple(_type_check(p, msg) for p in params)\n        if self in (Generic, Protocol):\n            # Generic can only be subscripted with unique type variables.\n            if not all(isinstance(p, TypeVar) for p in params):\n                raise TypeError(\n                    \"Parameters to %s[...] must all be type variables\" % self.__name__)\n            if len(set(params)) != len(params):\n                raise TypeError(\n                    \"Parameters to %s[...] must all be unique\" % self.__name__)\n            tvars = params\n            args = params\n        elif self in (Tuple, Callable):\n            tvars = _type_vars(params)\n            args = params\n        elif self.__origin__ in (Generic, Protocol):\n            # Can't subscript Generic[...] or Protocol[...].\n            raise TypeError(\"Cannot subscript already-subscripted %s\" %\n                            repr(self))\n        else:\n            # Subscripting a regular Generic subclass.\n            _check_generic(self, params)\n            tvars = _type_vars(params)\n            args = params\n\n        prepend = (self,) if self.__origin__ is None else ()\n        return self.__class__(self.__name__,\n                              prepend + self.__bases__,\n                              dict(self.__dict__),\n                              tvars=tvars,\n                              args=args,\n                              origin=self,\n                              extra=self.__extra__,\n                              orig_bases=self.__orig_bases__)\n\n    def __subclasscheck__(self, cls):\n        if self.__origin__ is not None:\n            # These should only be modules within the standard library.\n            # singledispatch is an exception, because it's a Python 2 backport\n            # of functools.singledispatch.\n            whitelist = ['abc', 'functools', 'singledispatch']\n            if (sys._getframe(1).f_globals['__name__'] in whitelist or\n                    # The second frame is needed for the case where we came\n                    # from _ProtocolMeta.__subclasscheck__.\n                    sys._getframe(2).f_globals['__name__'] in whitelist):\n                return False\n            raise TypeError(\"Parameterized generics cannot be used with class \"\n                            \"or instance checks\")\n        if self is Generic:\n            raise TypeError(\"Class %r cannot be used with class \"\n                            \"or instance checks\" % self)\n        return super(GenericMeta, self).__subclasscheck__(cls)\n\n    def __instancecheck__(self, instance):\n        # Since we extend ABC.__subclasscheck__ and\n        # ABC.__instancecheck__ inlines the cache checking done by the\n        # latter, we must extend __instancecheck__ too. For simplicity\n        # we just skip the cache check -- instance checks for generic\n        # classes are supposed to be rare anyways.\n        if hasattr(instance, \"__class__\"):\n            return issubclass(instance.__class__, self)\n        return False\n\n    def __setattr__(self, attr, value):\n        # We consider all the subscripted genrics as proxies for original class\n        if (\n            attr.startswith('__') and attr.endswith('__') or\n            attr.startswith('_abc_')\n        ):\n            super(GenericMeta, self).__setattr__(attr, value)\n        else:\n            super(GenericMeta, self._gorg).__setattr__(attr, value)\n\n\ndef _copy_generic(self):\n    \"\"\"Hack to work around https://bugs.python.org/issue11480 on Python 2\"\"\"\n    return self.__class__(self.__name__, self.__bases__, dict(self.__dict__),\n                          self.__parameters__, self.__args__, self.__origin__,\n                          self.__extra__, self.__orig_bases__)\n\n\ncopy._copy_dispatch[GenericMeta] = _copy_generic\n\n\n# Prevent checks for Generic to crash when defining Generic.\nGeneric = None\n\n\ndef _generic_new(base_cls, cls, *args, **kwds):\n    # Assure type is erased on instantiation,\n    # but attempt to store it in __orig_class__\n    if cls.__origin__ is None:\n        if (base_cls.__new__ is object.__new__ and\n                cls.__init__ is not object.__init__):\n            return base_cls.__new__(cls)\n        else:\n            return base_cls.__new__(cls, *args, **kwds)\n    else:\n        origin = cls._gorg\n        if (base_cls.__new__ is object.__new__ and\n                cls.__init__ is not object.__init__):\n            obj = base_cls.__new__(origin)\n        else:\n            obj = base_cls.__new__(origin, *args, **kwds)\n        try:\n            obj.__orig_class__ = cls\n        except AttributeError:\n            pass\n        obj.__init__(*args, **kwds)\n        return obj\n\n\nclass Generic(object):\n    \"\"\"Abstract base class for generic types.\n\n    A generic type is typically declared by inheriting from\n    this class parameterized with one or more type variables.\n    For example, a generic mapping type might be defined as::\n\n      class Mapping(Generic[KT, VT]):\n          def __getitem__(self, key: KT) -> VT:\n              ...\n          # Etc.\n\n    This class can then be used as follows::\n\n      def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:\n          try:\n              return mapping[key]\n          except KeyError:\n              return default\n    \"\"\"\n\n    __metaclass__ = GenericMeta\n    __slots__ = ()\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Generic:\n            raise TypeError(\"Type Generic cannot be instantiated; \"\n                            \"it can be used only as a base class\")\n        return _generic_new(cls.__next_in_mro__, cls, *args, **kwds)\n\n\nclass _TypingEmpty(object):\n    \"\"\"Internal placeholder for () or []. Used by TupleMeta and CallableMeta\n    to allow empty list/tuple in specific places, without allowing them\n    to sneak in where prohibited.\n    \"\"\"\n\n\nclass _TypingEllipsis(object):\n    \"\"\"Internal placeholder for ... (ellipsis).\"\"\"\n\n\nclass TupleMeta(GenericMeta):\n    \"\"\"Metaclass for Tuple (internal).\"\"\"\n\n    @_tp_cache\n    def __getitem__(self, parameters):\n        if self.__origin__ is not None or self._gorg is not Tuple:\n            # Normal generic rules apply if this is not the first subscription\n            # or a subscription of a subclass.\n            return super(TupleMeta, self).__getitem__(parameters)\n        if parameters == ():\n            return super(TupleMeta, self).__getitem__((_TypingEmpty,))\n        if not isinstance(parameters, tuple):\n            parameters = (parameters,)\n        if len(parameters) == 2 and parameters[1] is Ellipsis:\n            msg = \"Tuple[t, ...]: t must be a type.\"\n            p = _type_check(parameters[0], msg)\n            return super(TupleMeta, self).__getitem__((p, _TypingEllipsis))\n        msg = \"Tuple[t0, t1, ...]: each t must be a type.\"\n        parameters = tuple(_type_check(p, msg) for p in parameters)\n        return super(TupleMeta, self).__getitem__(parameters)\n\n    def __instancecheck__(self, obj):\n        if self.__args__ is None:\n            return isinstance(obj, tuple)\n        raise TypeError(\"Parameterized Tuple cannot be used \"\n                        \"with isinstance().\")\n\n    def __subclasscheck__(self, cls):\n        if self.__args__ is None:\n            return issubclass(cls, tuple)\n        raise TypeError(\"Parameterized Tuple cannot be used \"\n                        \"with issubclass().\")\n\n\ncopy._copy_dispatch[TupleMeta] = _copy_generic\n\n\nclass Tuple(tuple):\n    \"\"\"Tuple type; Tuple[X, Y] is the cross-product type of X and Y.\n\n    Example: Tuple[T1, T2] is a tuple of two elements corresponding\n    to type variables T1 and T2.  Tuple[int, float, str] is a tuple\n    of an int, a float and a string.\n\n    To specify a variable-length tuple of homogeneous type, use Tuple[T, ...].\n    \"\"\"\n\n    __metaclass__ = TupleMeta\n    __extra__ = tuple\n    __slots__ = ()\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Tuple:\n            raise TypeError(\"Type Tuple cannot be instantiated; \"\n                            \"use tuple() instead\")\n        return _generic_new(tuple, cls, *args, **kwds)\n\n\nclass CallableMeta(GenericMeta):\n    \"\"\" Metaclass for Callable.\"\"\"\n\n    def __repr__(self):\n        if self.__origin__ is None:\n            return super(CallableMeta, self).__repr__()\n        return self._tree_repr(self._subs_tree())\n\n    def _tree_repr(self, tree):\n        if self._gorg is not Callable:\n            return super(CallableMeta, self)._tree_repr(tree)\n        # For actual Callable (not its subclass) we override\n        # super(CallableMeta, self)._tree_repr() for nice formatting.\n        arg_list = []\n        for arg in tree[1:]:\n            if not isinstance(arg, tuple):\n                arg_list.append(_type_repr(arg))\n            else:\n                arg_list.append(arg[0]._tree_repr(arg))\n        if arg_list[0] == '...':\n            return repr(tree[0]) + '[..., %s]' % arg_list[1]\n        return (repr(tree[0]) +\n                '[[%s], %s]' % (', '.join(arg_list[:-1]), arg_list[-1]))\n\n    def __getitem__(self, parameters):\n        \"\"\"A thin wrapper around __getitem_inner__ to provide the latter\n        with hashable arguments to improve speed.\n        \"\"\"\n\n        if self.__origin__ is not None or self._gorg is not Callable:\n            return super(CallableMeta, self).__getitem__(parameters)\n        if not isinstance(parameters, tuple) or len(parameters) != 2:\n            raise TypeError(\"Callable must be used as \"\n                            \"Callable[[arg, ...], result].\")\n        args, result = parameters\n        if args is Ellipsis:\n            parameters = (Ellipsis, result)\n        else:\n            if not isinstance(args, list):\n                raise TypeError(\"Callable[args, result]: args must be a list.\"\n                                \" Got %.100r.\" % (args,))\n            parameters = (tuple(args), result)\n        return self.__getitem_inner__(parameters)\n\n    @_tp_cache\n    def __getitem_inner__(self, parameters):\n        args, result = parameters\n        msg = \"Callable[args, result]: result must be a type.\"\n        result = _type_check(result, msg)\n        if args is Ellipsis:\n            return super(CallableMeta, self).__getitem__((_TypingEllipsis, result))\n        msg = \"Callable[[arg, ...], result]: each arg must be a type.\"\n        args = tuple(_type_check(arg, msg) for arg in args)\n        parameters = args + (result,)\n        return super(CallableMeta, self).__getitem__(parameters)\n\n\ncopy._copy_dispatch[CallableMeta] = _copy_generic\n\n\nclass Callable(object):\n    \"\"\"Callable type; Callable[[int], str] is a function of (int) -> str.\n\n    The subscription syntax must always be used with exactly two\n    values: the argument list and the return type.  The argument list\n    must be a list of types or ellipsis; the return type must be a single type.\n\n    There is no syntax to indicate optional or keyword arguments,\n    such function types are rarely used as callback types.\n    \"\"\"\n\n    __metaclass__ = CallableMeta\n    __extra__ = collections_abc.Callable\n    __slots__ = ()\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Callable:\n            raise TypeError(\"Type Callable cannot be instantiated; \"\n                            \"use a non-abstract subclass instead\")\n        return _generic_new(cls.__next_in_mro__, cls, *args, **kwds)\n\n\ndef cast(typ, val):\n    \"\"\"Cast a value to a type.\n\n    This returns the value unchanged.  To the type checker this\n    signals that the return value has the designated type, but at\n    runtime we intentionally don't check anything (we want this\n    to be as fast as possible).\n    \"\"\"\n    return val\n\n\ndef _get_defaults(func):\n    \"\"\"Internal helper to extract the default arguments, by name.\"\"\"\n    code = func.__code__\n    pos_count = code.co_argcount\n    arg_names = code.co_varnames\n    arg_names = arg_names[:pos_count]\n    defaults = func.__defaults__ or ()\n    kwdefaults = func.__kwdefaults__\n    res = dict(kwdefaults) if kwdefaults else {}\n    pos_offset = pos_count - len(defaults)\n    for name, value in zip(arg_names[pos_offset:], defaults):\n        assert name not in res\n        res[name] = value\n    return res\n\n\ndef get_type_hints(obj, globalns=None, localns=None):\n    \"\"\"In Python 2 this is not supported and always returns None.\"\"\"\n    return None\n\n\ndef no_type_check(arg):\n    \"\"\"Decorator to indicate that annotations are not type hints.\n\n    The argument must be a class or function; if it is a class, it\n    applies recursively to all methods and classes defined in that class\n    (but not to methods defined in its superclasses or subclasses).\n\n    This mutates the function(s) or class(es) in place.\n    \"\"\"\n    if isinstance(arg, type):\n        arg_attrs = arg.__dict__.copy()\n        for attr, val in arg.__dict__.items():\n            if val in arg.__bases__ + (arg,):\n                arg_attrs.pop(attr)\n        for obj in arg_attrs.values():\n            if isinstance(obj, types.FunctionType):\n                obj.__no_type_check__ = True\n            if isinstance(obj, type):\n                no_type_check(obj)\n    try:\n        arg.__no_type_check__ = True\n    except TypeError:  # built-in classes\n        pass\n    return arg\n\n\ndef no_type_check_decorator(decorator):\n    \"\"\"Decorator to give another decorator the @no_type_check effect.\n\n    This wraps the decorator with something that wraps the decorated\n    function in @no_type_check.\n    \"\"\"\n\n    @functools.wraps(decorator)\n    def wrapped_decorator(*args, **kwds):\n        func = decorator(*args, **kwds)\n        func = no_type_check(func)\n        return func\n\n    return wrapped_decorator\n\n\ndef _overload_dummy(*args, **kwds):\n    \"\"\"Helper for @overload to raise when called.\"\"\"\n    raise NotImplementedError(\n        \"You should not call an overloaded function. \"\n        \"A series of @overload-decorated functions \"\n        \"outside a stub module should always be followed \"\n        \"by an implementation that is not @overload-ed.\")\n\n\ndef overload(func):\n    \"\"\"Decorator for overloaded functions/methods.\n\n    In a stub file, place two or more stub definitions for the same\n    function in a row, each decorated with @overload.  For example:\n\n      @overload\n      def utf8(value: None) -> None: ...\n      @overload\n      def utf8(value: bytes) -> bytes: ...\n      @overload\n      def utf8(value: str) -> bytes: ...\n\n    In a non-stub file (i.e. a regular .py file), do the same but\n    follow it with an implementation.  The implementation should *not*\n    be decorated with @overload.  For example:\n\n      @overload\n      def utf8(value: None) -> None: ...\n      @overload\n      def utf8(value: bytes) -> bytes: ...\n      @overload\n      def utf8(value: str) -> bytes: ...\n      def utf8(value):\n          # implementation goes here\n    \"\"\"\n    return _overload_dummy\n\n\n_PROTO_WHITELIST = ['Callable', 'Iterable', 'Iterator',\n                    'Hashable', 'Sized', 'Container', 'Collection',\n                    'Reversible', 'ContextManager']\n\n\nclass _ProtocolMeta(GenericMeta):\n    \"\"\"Internal metaclass for Protocol.\n\n    This exists so Protocol classes can be generic without deriving\n    from Generic.\n    \"\"\"\n    def __init__(cls, *args, **kwargs):\n        super(_ProtocolMeta, cls).__init__(*args, **kwargs)\n        if not cls.__dict__.get('_is_protocol', None):\n            cls._is_protocol = any(b is Protocol or\n                                   isinstance(b, _ProtocolMeta) and\n                                   b.__origin__ is Protocol\n                                   for b in cls.__bases__)\n        if cls._is_protocol:\n            for base in cls.__mro__[1:]:\n                if not (base in (object, Generic) or\n                        base.__module__ == '_abcoll' and\n                        base.__name__ in _PROTO_WHITELIST or\n                        isinstance(base, TypingMeta) and base._is_protocol or\n                        isinstance(base, GenericMeta) and base.__origin__ is Generic):\n                    raise TypeError('Protocols can only inherit from other protocols,'\n                                    ' got %r' % base)\n            cls._callable_members_only = all(callable(getattr(cls, attr))\n                                             for attr in cls._get_protocol_attrs())\n\n            def _no_init(self, *args, **kwargs):\n                if type(self)._is_protocol:\n                    raise TypeError('Protocols cannot be instantiated')\n            cls.__init__ = _no_init\n\n        def _proto_hook(cls, other):\n            if not cls.__dict__.get('_is_protocol', None):\n                return NotImplemented\n            if not isinstance(other, type):\n                # Similar error as for issubclass(1, int)\n                # (also not a chance for old-style classes)\n                raise TypeError('issubclass() arg 1 must be a new-style class')\n            for attr in cls._get_protocol_attrs():\n                for base in other.__mro__:\n                    if attr in base.__dict__:\n                        if base.__dict__[attr] is None:\n                            return NotImplemented\n                        break\n                else:\n                    return NotImplemented\n            return True\n        if '__subclasshook__' not in cls.__dict__:\n            cls.__subclasshook__ = classmethod(_proto_hook)\n\n    def __instancecheck__(self, instance):\n        # We need this method for situations where attributes are assigned in __init__\n        if isinstance(instance, type):\n            # This looks like a fundamental limitation of Python 2.\n            # It cannot support runtime protocol metaclasses, On Python 2 classes\n            # cannot be correctly inspected as instances of protocols.\n            return False\n        if ((not getattr(self, '_is_protocol', False) or\n                self._callable_members_only) and\n                issubclass(instance.__class__, self)):\n            return True\n        if self._is_protocol:\n            if all(hasattr(instance, attr) and\n                    (not callable(getattr(self, attr)) or\n                     getattr(instance, attr) is not None)\n                    for attr in self._get_protocol_attrs()):\n                return True\n        return super(GenericMeta, self).__instancecheck__(instance)\n\n    def __subclasscheck__(self, cls):\n        if (self.__dict__.get('_is_protocol', None) and\n                not self.__dict__.get('_is_runtime_protocol', None)):\n            if (sys._getframe(1).f_globals['__name__'] in ['abc', 'functools'] or\n                    # This is needed because we remove subclasses from unions on Python 2.\n                    sys._getframe(2).f_globals['__name__'] == 'typing'):\n                return False\n            raise TypeError(\"Instance and class checks can only be used with\"\n                            \" @runtime_checkable protocols\")\n        if (self.__dict__.get('_is_runtime_protocol', None) and\n                not self._callable_members_only):\n            if sys._getframe(1).f_globals['__name__'] in ['abc', 'functools']:\n                return super(GenericMeta, self).__subclasscheck__(cls)\n            raise TypeError(\"Protocols with non-method members\"\n                            \" don't support issubclass()\")\n        return super(_ProtocolMeta, self).__subclasscheck__(cls)\n\n    def _get_protocol_attrs(self):\n        attrs = set()\n        for base in self.__mro__[:-1]:  # without object\n            if base.__name__ in ('Protocol', 'Generic'):\n                continue\n            annotations = getattr(base, '__annotations__', {})\n            for attr in list(base.__dict__.keys()) + list(annotations.keys()):\n                if (not attr.startswith('_abc_') and attr not in (\n                        '__abstractmethods__', '__annotations__', '__weakref__',\n                        '_is_protocol', '_is_runtime_protocol', '__dict__',\n                        '__args__', '__slots__', '_get_protocol_attrs',\n                        '__next_in_mro__', '__parameters__', '__origin__',\n                        '__orig_bases__', '__extra__', '__tree_hash__',\n                        '__doc__', '__subclasshook__', '__init__', '__new__',\n                        '__module__', '_MutableMapping__marker',\n                        '__metaclass__', '_gorg', '_callable_members_only')):\n                    attrs.add(attr)\n        return attrs\n\n\nclass Protocol(object):\n    \"\"\"Base class for protocol classes. Protocol classes are defined as::\n\n      class Proto(Protocol):\n          def meth(self):\n              # type: () -> int\n              pass\n\n    Such classes are primarily used with static type checkers that recognize\n    structural subtyping (static duck-typing), for example::\n\n      class C:\n          def meth(self):\n              # type: () -> int\n              return 0\n\n      def func(x):\n          # type: (Proto) -> int\n          return x.meth()\n\n      func(C())  # Passes static type check\n\n    See PEP 544 for details. Protocol classes decorated with @typing.runtime_checkable\n    act as simple-minded runtime protocols that checks only the presence of\n    given attributes, ignoring their type signatures.\n\n    Protocol classes can be generic, they are defined as::\n\n      class GenProto(Protocol[T]):\n          def meth(self):\n              # type: () -> T\n              pass\n    \"\"\"\n\n    __metaclass__ = _ProtocolMeta\n    __slots__ = ()\n    _is_protocol = True\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Protocol:\n            raise TypeError(\"Type Protocol cannot be instantiated; \"\n                            \"it can be used only as a base class\")\n        return _generic_new(cls.__next_in_mro__, cls, *args, **kwds)\n\n\ndef runtime_checkable(cls):\n    \"\"\"Mark a protocol class as a runtime protocol, so that it\n    can be used with isinstance() and issubclass(). Raise TypeError\n    if applied to a non-protocol class.\n\n    This allows a simple-minded structural check very similar to the\n    one-offs in collections.abc such as Hashable.\n    \"\"\"\n    if not isinstance(cls, _ProtocolMeta) or not cls._is_protocol:\n        raise TypeError('@runtime_checkable can be only applied to protocol classes,'\n                        ' got %r' % cls)\n    cls._is_runtime_protocol = True\n    return cls\n\n\n# Various ABCs mimicking those in collections.abc.\n# A few are simply re-exported for completeness.\n\nHashable = collections_abc.Hashable  # Not generic.\n\n\nclass Iterable(Generic[T_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.Iterable\n\n\nclass Iterator(Iterable[T_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.Iterator\n\n\n@runtime_checkable\nclass SupportsInt(Protocol):\n    __slots__ = ()\n\n    @abstractmethod\n    def __int__(self):\n        pass\n\n\n@runtime_checkable\nclass SupportsFloat(Protocol):\n    __slots__ = ()\n\n    @abstractmethod\n    def __float__(self):\n        pass\n\n\n@runtime_checkable\nclass SupportsComplex(Protocol):\n    __slots__ = ()\n\n    @abstractmethod\n    def __complex__(self):\n        pass\n\n\n@runtime_checkable\nclass SupportsIndex(Protocol):\n    __slots__ = ()\n\n    @abstractmethod\n    def __index__(self):\n        pass\n\n\n@runtime_checkable\nclass SupportsAbs(Protocol[T_co]):\n    __slots__ = ()\n\n    @abstractmethod\n    def __abs__(self):\n        pass\n\n\nif hasattr(collections_abc, 'Reversible'):\n    class Reversible(Iterable[T_co]):\n        __slots__ = ()\n        __extra__ = collections_abc.Reversible\nelse:\n    @runtime_checkable\n    class Reversible(Protocol[T_co]):\n        __slots__ = ()\n\n        @abstractmethod\n        def __reversed__(self):\n            pass\n\n\nSized = collections_abc.Sized  # Not generic.\n\n\nclass Container(Generic[T_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.Container\n\n\n# Callable was defined earlier.\n\n\nclass AbstractSet(Sized, Iterable[T_co], Container[T_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.Set\n\n\nclass MutableSet(AbstractSet[T]):\n    __slots__ = ()\n    __extra__ = collections_abc.MutableSet\n\n\n# NOTE: It is only covariant in the value type.\nclass Mapping(Sized, Iterable[KT], Container[KT], Generic[KT, VT_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.Mapping\n\n\nclass MutableMapping(Mapping[KT, VT]):\n    __slots__ = ()\n    __extra__ = collections_abc.MutableMapping\n\n\nif hasattr(collections_abc, 'Reversible'):\n    class Sequence(Sized, Reversible[T_co], Container[T_co]):\n        __slots__ = ()\n        __extra__ = collections_abc.Sequence\nelse:\n    class Sequence(Sized, Iterable[T_co], Container[T_co]):\n        __slots__ = ()\n        __extra__ = collections_abc.Sequence\n\n\nclass MutableSequence(Sequence[T]):\n    __slots__ = ()\n    __extra__ = collections_abc.MutableSequence\n\n\nclass ByteString(Sequence[int]):\n    pass\n\n\nByteString.register(str)\nByteString.register(bytearray)\n\n\nclass List(list, MutableSequence[T]):\n    __slots__ = ()\n    __extra__ = list\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is List:\n            raise TypeError(\"Type List cannot be instantiated; \"\n                            \"use list() instead\")\n        return _generic_new(list, cls, *args, **kwds)\n\n\nclass Deque(collections.deque, MutableSequence[T]):\n    __slots__ = ()\n    __extra__ = collections.deque\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Deque:\n            return collections.deque(*args, **kwds)\n        return _generic_new(collections.deque, cls, *args, **kwds)\n\n\nclass Set(set, MutableSet[T]):\n    __slots__ = ()\n    __extra__ = set\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Set:\n            raise TypeError(\"Type Set cannot be instantiated; \"\n                            \"use set() instead\")\n        return _generic_new(set, cls, *args, **kwds)\n\n\nclass FrozenSet(frozenset, AbstractSet[T_co]):\n    __slots__ = ()\n    __extra__ = frozenset\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is FrozenSet:\n            raise TypeError(\"Type FrozenSet cannot be instantiated; \"\n                            \"use frozenset() instead\")\n        return _generic_new(frozenset, cls, *args, **kwds)\n\n\nclass MappingView(Sized, Iterable[T_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.MappingView\n\n\nclass KeysView(MappingView[KT], AbstractSet[KT]):\n    __slots__ = ()\n    __extra__ = collections_abc.KeysView\n\n\nclass ItemsView(MappingView[Tuple[KT, VT_co]],\n                AbstractSet[Tuple[KT, VT_co]],\n                Generic[KT, VT_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.ItemsView\n\n\nclass ValuesView(MappingView[VT_co]):\n    __slots__ = ()\n    __extra__ = collections_abc.ValuesView\n\n\nclass ContextManager(Generic[T_co]):\n    __slots__ = ()\n\n    def __enter__(self):\n        return self\n\n    @abc.abstractmethod\n    def __exit__(self, exc_type, exc_value, traceback):\n        return None\n\n    @classmethod\n    def __subclasshook__(cls, C):\n        if cls is ContextManager:\n            # In Python 3.6+, it is possible to set a method to None to\n            # explicitly indicate that the class does not implement an ABC\n            # (https://bugs.python.org/issue25958), but we do not support\n            # that pattern here because this fallback class is only used\n            # in Python 3.5 and earlier.\n            if (any(\"__enter__\" in B.__dict__ for B in C.__mro__) and\n                any(\"__exit__\" in B.__dict__ for B in C.__mro__)):\n                return True\n        return NotImplemented\n\n\nclass Dict(dict, MutableMapping[KT, VT]):\n    __slots__ = ()\n    __extra__ = dict\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Dict:\n            raise TypeError(\"Type Dict cannot be instantiated; \"\n                            \"use dict() instead\")\n        return _generic_new(dict, cls, *args, **kwds)\n\n\nclass DefaultDict(collections.defaultdict, MutableMapping[KT, VT]):\n    __slots__ = ()\n    __extra__ = collections.defaultdict\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is DefaultDict:\n            return collections.defaultdict(*args, **kwds)\n        return _generic_new(collections.defaultdict, cls, *args, **kwds)\n\n\nclass Counter(collections.Counter, Dict[T, int]):\n    __slots__ = ()\n    __extra__ = collections.Counter\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Counter:\n            return collections.Counter(*args, **kwds)\n        return _generic_new(collections.Counter, cls, *args, **kwds)\n\n\n# Determine what base class to use for Generator.\nif hasattr(collections_abc, 'Generator'):\n    # Sufficiently recent versions of 3.5 have a Generator ABC.\n    _G_base = collections_abc.Generator\nelse:\n    # Fall back on the exact type.\n    _G_base = types.GeneratorType\n\n\nclass Generator(Iterator[T_co], Generic[T_co, T_contra, V_co]):\n    __slots__ = ()\n    __extra__ = _G_base\n\n    def __new__(cls, *args, **kwds):\n        if cls._gorg is Generator:\n            raise TypeError(\"Type Generator cannot be instantiated; \"\n                            \"create a subclass instead\")\n        return _generic_new(_G_base, cls, *args, **kwds)\n\n\n# Internal type variable used for Type[].\nCT_co = TypeVar('CT_co', covariant=True, bound=type)\n\n\n# This is not a real generic class.  Don't use outside annotations.\nclass Type(Generic[CT_co]):\n    \"\"\"A special construct usable to annotate class objects.\n\n    For example, suppose we have the following classes::\n\n      class User: ...  # Abstract base for User classes\n      class BasicUser(User): ...\n      class ProUser(User): ...\n      class TeamUser(User): ...\n\n    And a function that takes a class argument that's a subclass of\n    User and returns an instance of the corresponding class::\n\n      U = TypeVar('U', bound=User)\n      def new_user(user_class: Type[U]) -> U:\n          user = user_class()\n          # (Here we could write the user object to a database)\n          return user\n\n      joe = new_user(BasicUser)\n\n    At this point the type checker knows that joe has type BasicUser.\n    \"\"\"\n    __slots__ = ()\n    __extra__ = type\n\n\ndef NamedTuple(typename, fields):\n    \"\"\"Typed version of namedtuple.\n\n    Usage::\n\n        Employee = typing.NamedTuple('Employee', [('name', str), ('id', int)])\n\n    This is equivalent to::\n\n        Employee = collections.namedtuple('Employee', ['name', 'id'])\n\n    The resulting class has one extra attribute: _field_types,\n    giving a dict mapping field names to types.  (The field names\n    are in the _fields attribute, which is part of the namedtuple\n    API.)\n    \"\"\"\n    fields = [(n, t) for n, t in fields]\n    cls = collections.namedtuple(typename, [n for n, t in fields])\n    cls._field_types = dict(fields)\n    # Set the module to the caller's module (otherwise it'd be 'typing').\n    try:\n        cls.__module__ = sys._getframe(1).f_globals.get('__name__', '__main__')\n    except (AttributeError, ValueError):\n        pass\n    return cls\n\n\ndef _check_fails(cls, other):\n    try:\n        if sys._getframe(1).f_globals['__name__'] not in ['abc', 'functools', 'typing']:\n            # Typed dicts are only for static structural subtyping.\n            raise TypeError('TypedDict does not support instance and class checks')\n    except (AttributeError, ValueError):\n        pass\n    return False\n\n\ndef _dict_new(cls, *args, **kwargs):\n    return dict(*args, **kwargs)\n\n\ndef _typeddict_new(cls, _typename, _fields=None, **kwargs):\n    total = kwargs.pop('total', True)\n    if _fields is None:\n        _fields = kwargs\n    elif kwargs:\n        raise TypeError(\"TypedDict takes either a dict or keyword arguments,\"\n                        \" but not both\")\n\n    ns = {'__annotations__': dict(_fields), '__total__': total}\n    try:\n        # Setting correct module is necessary to make typed dict classes pickleable.\n        ns['__module__'] = sys._getframe(1).f_globals.get('__name__', '__main__')\n    except (AttributeError, ValueError):\n        pass\n\n    return _TypedDictMeta(_typename, (), ns)\n\n\nclass _TypedDictMeta(type):\n    def __new__(cls, name, bases, ns, total=True):\n        # Create new typed dict class object.\n        # This method is called directly when TypedDict is subclassed,\n        # or via _typeddict_new when TypedDict is instantiated. This way\n        # TypedDict supports all three syntaxes described in its docstring.\n        # Subclasses and instances of TypedDict return actual dictionaries\n        # via _dict_new.\n        ns['__new__'] = _typeddict_new if name == b'TypedDict' else _dict_new\n        tp_dict = super(_TypedDictMeta, cls).__new__(cls, name, (dict,), ns)\n\n        anns = ns.get('__annotations__', {})\n        msg = \"TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type\"\n        anns = {n: _type_check(tp, msg) for n, tp in anns.items()}\n        for base in bases:\n            anns.update(base.__dict__.get('__annotations__', {}))\n        tp_dict.__annotations__ = anns\n        if not hasattr(tp_dict, '__total__'):\n            tp_dict.__total__ = total\n        return tp_dict\n\n    __instancecheck__ = __subclasscheck__ = _check_fails\n\n\nTypedDict = _TypedDictMeta(b'TypedDict', (dict,), {})\nTypedDict.__module__ = __name__\nTypedDict.__doc__ = \\\n    \"\"\"A simple typed name space. At runtime it is equivalent to a plain dict.\n\n    TypedDict creates a dictionary type that expects all of its\n    instances to have a certain set of keys, with each key\n    associated with a value of a consistent type. This expectation\n    is not checked at runtime but is only enforced by type checkers.\n    Usage::\n\n        Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})\n\n        a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK\n        b: Point2D = {'z': 3, 'label': 'bad'}           # Fails type check\n\n        assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')\n\n    The type info could be accessed via Point2D.__annotations__. TypedDict\n    supports an additional equivalent form::\n\n        Point2D = TypedDict('Point2D', x=int, y=int, label=str)\n    \"\"\"\n\n\ndef NewType(name, tp):\n    \"\"\"NewType creates simple unique types with almost zero\n    runtime overhead. NewType(name, tp) is considered a subtype of tp\n    by static type checkers. At runtime, NewType(name, tp) returns\n    a dummy function that simply returns its argument. Usage::\n\n        UserId = NewType('UserId', int)\n\n        def name_by_id(user_id):\n            # type: (UserId) -> str\n            ...\n\n        UserId('user')          # Fails type check\n\n        name_by_id(42)          # Fails type check\n        name_by_id(UserId(42))  # OK\n\n        num = UserId(5) + 1     # type: int\n    \"\"\"\n\n    def new_type(x):\n        return x\n\n    # Some versions of Python 2 complain because of making all strings unicode\n    new_type.__name__ = str(name)\n    new_type.__supertype__ = tp\n    return new_type\n\n\n# Python-version-specific alias (Python 2: unicode; Python 3: str)\nText = unicode\n\n\n# Constant that's True when type checking, but False here.\nTYPE_CHECKING = False\n\n\nclass IO(Generic[AnyStr]):\n    \"\"\"Generic base class for TextIO and BinaryIO.\n\n    This is an abstract, generic version of the return of open().\n\n    NOTE: This does not distinguish between the different possible\n    classes (text vs. binary, read vs. write vs. read/write,\n    append-only, unbuffered).  The TextIO and BinaryIO subclasses\n    below capture the distinctions between text vs. binary, which is\n    pervasive in the interface; however we currently do not offer a\n    way to track the other distinctions in the type system.\n    \"\"\"\n\n    __slots__ = ()\n\n    @abstractproperty\n    def mode(self):\n        pass\n\n    @abstractproperty\n    def name(self):\n        pass\n\n    @abstractmethod\n    def close(self):\n        pass\n\n    @abstractproperty\n    def closed(self):\n        pass\n\n    @abstractmethod\n    def fileno(self):\n        pass\n\n    @abstractmethod\n    def flush(self):\n        pass\n\n    @abstractmethod\n    def isatty(self):\n        pass\n\n    @abstractmethod\n    def read(self, n=-1):\n        pass\n\n    @abstractmethod\n    def readable(self):\n        pass\n\n    @abstractmethod\n    def readline(self, limit=-1):\n        pass\n\n    @abstractmethod\n    def readlines(self, hint=-1):\n        pass\n\n    @abstractmethod\n    def seek(self, offset, whence=0):\n        pass\n\n    @abstractmethod\n    def seekable(self):\n        pass\n\n    @abstractmethod\n    def tell(self):\n        pass\n\n    @abstractmethod\n    def truncate(self, size=None):\n        pass\n\n    @abstractmethod\n    def writable(self):\n        pass\n\n    @abstractmethod\n    def write(self, s):\n        pass\n\n    @abstractmethod\n    def writelines(self, lines):\n        pass\n\n    @abstractmethod\n    def __enter__(self):\n        pass\n\n    @abstractmethod\n    def __exit__(self, type, value, traceback):\n        pass\n\n\nclass BinaryIO(IO[bytes]):\n    \"\"\"Typed version of the return of open() in binary mode.\"\"\"\n\n    __slots__ = ()\n\n    @abstractmethod\n    def write(self, s):\n        pass\n\n    @abstractmethod\n    def __enter__(self):\n        pass\n\n\nclass TextIO(IO[unicode]):\n    \"\"\"Typed version of the return of open() in text mode.\"\"\"\n\n    __slots__ = ()\n\n    @abstractproperty\n    def buffer(self):\n        pass\n\n    @abstractproperty\n    def encoding(self):\n        pass\n\n    @abstractproperty\n    def errors(self):\n        pass\n\n    @abstractproperty\n    def line_buffering(self):\n        pass\n\n    @abstractproperty\n    def newlines(self):\n        pass\n\n    @abstractmethod\n    def __enter__(self):\n        pass\n\n\nclass io(object):\n    \"\"\"Wrapper namespace for IO generic classes.\"\"\"\n\n    __all__ = ['IO', 'TextIO', 'BinaryIO']\n    IO = IO\n    TextIO = TextIO\n    BinaryIO = BinaryIO\n\n\nio.__name__ = __name__ + b'.io'\nsys.modules[io.__name__] = io\n\n\nPattern = _TypeAlias('Pattern', AnyStr, type(stdlib_re.compile('')),\n                     lambda p: p.pattern)\nMatch = _TypeAlias('Match', AnyStr, type(stdlib_re.match('', '')),\n                   lambda m: m.re.pattern)\n\n\nclass re(object):\n    \"\"\"Wrapper namespace for re type aliases.\"\"\"\n\n    __all__ = ['Pattern', 'Match']\n    Pattern = Pattern\n    Match = Match\n\n\nre.__name__ = __name__ + b'.re'\nsys.modules[re.__name__] = re\n"
  },
  {
    "path": "vendor_packages.py",
    "content": "import site\nimport shutil\nimport os.path\n\nos.system(\"mkdir -p %s\" % (os.path.dirname(site.getsitepackages()[0]), ))\nshutil.copytree(os.path.join(os.path.dirname(__file__), \"vendor\"), site.getsitepackages()[0])"
  },
  {
    "path": "version.py",
    "content": "\nPYI_VERSION = '1.0.4'\n\nif __name__ == '__main__':\n    print(PYI_VERSION)"
  }
]